jubnl
761cd14b2b
fix(server): plan 3a review follow-ups — fail closed without an ORM at every choke point; seam and D5 ratchet tests; dead method and DDL copies removed
2026-09-22 16:54:45 +02:00
jubnl
6fafcd72f2
fix(settings): drop dead wiring and the speculative deleteForUser; strict row assertions
2026-09-22 15:47:02 +02:00
jubnl
570a6ede85
fix(db): generator names relation properties in captured UNIQUE constraints
2026-09-22 15:46:46 +02:00
jubnl
59fa932ec8
test(server): harness constructors follow the Task 5 repository signatures; one test ORM per handle in the plugin host
2026-09-22 15:19:58 +02:00
jubnl
6763648c45
refactor(settings): user and instance settings through repositories
...
SettingsRepository (getForUser/upsertForUser/getOne/deleteForUser) replaces
the per-user settings table's raw SQL; SettingsService drops DatabaseService
entirely. instance-api-keys.ts's readInstanceApiKey/writeInstanceApiKey/
resolveApiKey take an explicit AppSettingsRepository/UsersRepository instead
of a raw connection.
An earlier version resolved those two repositories itself from the active
MikroORM request context, so none of its six callers needed to change. That
worked in production and e2e (always inside a real request) but broke
service construction in plain unit tests across every calling domain
(addons, auth x2, maps, transit, unsplash - 185 failures on a full run),
since none of them wrap a request context. Each of those six services now
injects its own AppSettingsRepository/UsersRepository and passes them
through explicitly, matching how every other converted repository in this
migration is consumed; their own SQL is untouched (outside Plan 3a).
2026-09-22 15:08:49 +02:00
jubnl
09a0a929b4
fix(db): PK lookups inside patch refresh past the identity map; corrected identity-map notes
2026-09-22 14:26:29 +02:00
jubnl
4d528a51d3
fix(platform): well-known gate tolerates a synchronous addon read from the context helper
2026-09-22 14:24:34 +02:00
jubnl
98e906a88e
chore(addons): well-known gate wraps only the addon read in a request context; drop unused test factories
2026-09-22 14:23:39 +02:00
jubnl
310a3b0ad3
fix(db): generator captures inline UNIQUE constraints
...
SqliteSchemaHelper.getIndexes() drops every unnamed sqlite_autoindex_
entry before entity-generator ever sees it, so a table-level
UNIQUE(...) constraint with no separate named CREATE UNIQUE INDEX
(settings' UNIQUE(user_id, key) among ~40 others) never reached the
generated entity's uniques: metadata. Adds a general
RULE9_addImplicitUniqueConstraints (skips a column set identical to
the table's own primary key — AppSettings.key/Addons.id noise) fed by
a PRAGMA index_list/index_info scan, and regenerates every entity.
2026-09-22 14:13:09 +02:00
jubnl
6db91c8bf3
refactor(addons): addon catalog and photo providers through repositories
2026-09-22 14:06:57 +02:00
jubnl
aa1067035f
refactor(categories, tags): repositories replace raw SQL
2026-09-22 13:54:13 +02:00
jubnl
e9391a9ae1
fix(server): non-HTTP entrypoints run inside an ORM request context; permission loads fail closed on context errors
2026-09-22 13:25:17 +02:00
jubnl
86c558cdd6
fix(audit): audit rows are native inserts, not a unit-of-work flush; closed test ORMs
2026-09-22 12:56:03 +02:00
jubnl
b0905f9867
docs(db): owned-lookup call-site convention; refresh side effect; e2e ORM module spread notes
2026-09-22 12:53:47 +02:00
jubnl
4209343328
fix(db): PK reads refresh past the identity map; typed owned-lookup generics; e2e ORM module mirrors production config
2026-09-22 12:38:59 +02:00
jubnl
c2da9d62f7
refactor(audit): audit log writes through AuditLogRepository
2026-09-22 12:34:49 +02:00
jubnl
b8e7dbccc6
fix(server): boot-time settings read runs inside an explicit ORM request context
2026-09-22 12:32:17 +02:00
jubnl
7908914345
refactor(permissions): permission flags through AppSettingsRepository
2026-09-22 12:30:20 +02:00
jubnl
f460ae4fcb
feat(db): AppSettings and Users repositories; forFeature wiring pattern
2026-09-22 12:06:13 +02:00
jubnl
47e1801908
chore(db): entity --check reports stray files; class-field census is a ratchet; migrate-encryption typechecked
2026-09-22 11:57:50 +02:00
jubnl
11eeed46ee
fix(db): no NaN class-field initialisers; entity generator --check gate in CI; parity normaliser keeps literal case
2026-09-22 11:42:48 +02:00
jubnl
60d6e1fcd1
refactor(db): every entity in the snake_case shape; document-sync entities added; one repository per entity
2026-09-22 11:01:36 +02:00
jubnl
7534c2f903
fix(db): generator keeps NOT NULL boolean defaults; fails if a JSON interface import survives
2026-09-22 10:39:07 +02:00
jubnl
257529b250
fix(db): generator guard rails — validation cannot mask hidden()/index loss; typed JSON; loud failures
2026-09-22 10:24:10 +02:00
jubnl
7f379cac85
feat(db): re-runnable entity generator encoding the snake_case/DbTimestampType rules
2026-09-22 09:26:28 +02:00
jubnl
1e52332208
test(db): numeric ids for the primary-relation spike
2026-09-22 08:43:20 +02:00
jubnl
fc1c788e9a
test(db): parity gate also holds declared pivot entities; per-field column types; missing-set ratchets both ways
2026-09-22 08:38:06 +02:00
jubnl
4a67be3f87
feat(db): primary-relation entities proven (BudgetCategoryOrder, VacayUserSettings)
2026-09-22 08:35:46 +02:00
jubnl
6d6b6932f4
test(db): entity metadata must match the migrated schema; fix the four drifts it found
2026-09-22 08:25:43 +02:00
jubnl
de2d13b1af
fix(server): upload filters answer multer once on a throwing callback; positive call-graph gate test
2026-09-22 08:10:23 +02:00
jubnl
ae2af05cad
fix(server): phase 1 review follow-ups — awaited returns, logged upload-filter rejections, covered handshake/notice branches, call-graph gate in CI, dead test imports
2026-09-22 07:54:09 +02:00
jubnl
f202227bbc
refactor(trips, feeds): drop added return annotations; no double await on the feed guard
2026-09-22 06:41:46 +02:00
jubnl
39a6d991ce
refactor(server): remove DatabaseService.transaction — every transaction runs through UnitOfWork
2026-09-22 06:39:38 +02:00
jubnl
a0f50c8316
refactor(trip-read-model, trips, feeds): async DB-touching methods; transactions through UnitOfWork
2026-09-22 06:30:13 +02:00
jubnl
bd8aeb06f5
refactor(roadtrip, reservations): return await on transactional; document the single-flight promises
2026-09-22 06:29:49 +02:00
jubnl
869d139412
refactor(reservations, booking-import, calendar, integrations, roadtrip): async DB-touching methods; transactions through UnitOfWork
2026-09-22 06:11:41 +02:00
jubnl
a1fbfe6d75
refactor(assignments): drop the unused Trip type alias
2026-09-22 05:35:53 +02:00
jubnl
571df42bed
refactor(trips): rewrite AccommodationsService.createAccommodation .bind alias
...
Recipe R4 trap named in the Task 12 brief: a .bind alias of an
AssignmentsService/AccommodationsService method is typed any and hides a
missing await from tsc and the promise lint rules. createAccommodation
belongs to this task's group, so rewritten as an arrow forwarding to the
method instead of a bound reference.
2026-09-22 05:22:51 +02:00
jubnl
5c8decd3ea
refactor(assignments, public-api, accommodations, places): async DB-touching methods; transactions through UnitOfWork
2026-09-22 05:21:48 +02:00
jubnl
3a8b54d761
fix(server): the journey hooks are awaited by their callers, not detached
2026-09-22 04:38:12 +02:00
jubnl
845320e0a4
refactor(journey, oidc, place-enrichment, tokens, trip-members): async DB-touching methods; transactions through UnitOfWork
2026-09-22 04:16:07 +02:00
jubnl
ad6e1ce8f0
fix(vacay): type the loop accumulators the async sweep introduced
2026-09-22 03:44:48 +02:00
jubnl
cb177ce655
refactor(vacay, admin, doc-sync): async DB-touching methods; transactions through UnitOfWork
2026-09-22 03:29:33 +02:00
jubnl
567593a259
chore(server): lint rule also refuses a Promise handed to expect() without resolves/rejects
2026-09-22 02:32:59 +02:00
jubnl
37992de7ab
refactor(memories, photos, packing, share): async DB-touching methods; transactions through UnitOfWork
2026-09-22 02:21:06 +02:00
jubnl
6b755314d8
refactor(collab, collections, maps): async DB-touching methods; transactions through UnitOfWork
2026-09-22 01:49:18 +02:00
jubnl
fdb12aed1e
test(files): upload filters fail closed on an excluded or unresolvable type
2026-09-22 01:21:57 +02:00
jubnl
fc49c0c768
refactor(tokens): async DB-touching methods; the auth token handlers await them
2026-09-22 01:21:29 +02:00
jubnl
4700bb38a5
test(server): suites await the methods earlier sweep groups made async
2026-09-22 01:16:50 +02:00
jubnl
7940b7ff84
refactor(auth, files): async DB-touching methods; transactions through UnitOfWork
2026-09-22 01:08:22 +02:00