Commit Graph

511 Commits

Author SHA1 Message Date
jubnl 18a4784ebd refactor(trips): trips through repositories 2026-09-23 09:33:48 +02:00
jubnl f19face405 refactor(places): import paths through repositories 2026-09-23 08:53:54 +02:00
jubnl 955809f15f fix(server): place-shadow source counts ordered in SQL; identity-map ratchets load-bearing; photo-cache race pinned 2026-09-23 08:31:36 +02:00
jubnl 9f1f5c45bf refactor(places): places, tags, ratings and place images through repositories 2026-09-23 08:15:05 +02:00
jubnl 94c6efbbcc refactor(trip-members): membership, guests and the trip read model through repositories 2026-09-23 08:00:39 +02:00
jubnl cee6310e59 refactor(server): trip-membership, place-shadow, place-enrichment, place-photos and query helpers through repositories 2026-09-23 06:41:03 +02:00
jubnl f41da98df3 refactor(assignments): day assignments through repositories 2026-09-23 06:27:21 +02:00
jubnl d7f5bc64c1 refactor(days): days and day notes through repositories 2026-09-23 05:31:36 +02:00
jubnl d2e0d7e320 refactor(trips): trip access through TripsRepository; demo seed in a request context; dialect helpers for the trips cluster 2026-09-23 04:46:18 +02:00
jubnl 769b9577ec refactor(server): trip-access primitives async at every caller 2026-09-23 02:46:39 +02:00
jubnl 8efb3c8623 fix(server): plan 3b close-out — case folding on both sides for identifier lookups (non-ASCII login regression); coverage ratchet restored; repository scaffold and instanceof ratchet on TrekRepository; D-shape tests load-bearing 2026-09-23 01:48:27 +02:00
jubnl 8b815891f5 fix(auth): invite validation keeps expires_at null on the wire; password transaction scopes and reset-token burn pinned 2026-09-23 00:00:32 +02:00
jubnl 8610a67bb9 refactor(oidc): OIDC identities and settings through repositories 2026-09-22 23:44:26 +02:00
jubnl 33b9488653 refactor(auth): AuthService and account cleanup through repositories 2026-09-22 23:17:17 +02:00
jubnl 21ade19d44 refactor(db): TrekRepository base — every repository path validates the request context and reads bypass the identity map by default 2026-09-22 22:37:49 +02:00
jubnl 8ba55bda30 fix(db): generator emits the referenced column for non-PK foreign keys; OAuth client joins through the relation; FK parity un-skipped 2026-09-22 21:53:34 +02:00
jubnl 80a0fdc4d9 fix(auth): non-numeric passkey and invite ids answer the legacy 404, never NaN; invite join type pinned 2026-09-22 21:31:46 +02:00
jubnl d82395d0ae refactor(oauth): OAuth server tables through repositories
OauthClientsRepository/OauthTokensRepository/OauthConsentsRepository
replace OauthService's raw SQL (OA1-OA33). revokeChain's recursive CTE
and the oauth_clients join (its FK actually targets client_id, not the
row id the generated relation assumes) go through em.getKysely();
OA19's chain revoke is one nativeUpdate($in); OA12's consent grant is
em.upsert on the (client, user) unique key. revokeAllForUser built now
for Task 5. Every row-out read is disableIdentityMap: true; inserts go
through em.insert.
2026-09-22 21:18:08 +02:00
jubnl 44cf31c958 fix(server): non-numeric route ids answer the legacy not-found, never NaN (tokens, categories, tags); mint path back to two statements; identity-map regression pinned 2026-09-22 21:08:06 +02:00
jubnl 8d0dddf385 fix(db): row-out repository reads bypass the identity map — stale write-back over nativeUpdate at flush; insertUser via em.insert; settings round-trip pinned 2026-09-22 20:32:35 +02:00
jubnl e9d0cb60e0 refactor(auth): passkeys and registration invites through repositories 2026-09-22 20:25:50 +02:00
jubnl daef15be70 refactor(tokens): MCP and API tokens through McpTokensRepository 2026-09-22 20:23:11 +02:00
jubnl 57f4e29b9a refactor(auth): users table through UsersRepository; JWT and MFA lookups repository-backed 2026-09-22 19:39:01 +02:00
jubnl 7453c7dafa feat(server): pre-init photo route and WS handshake run in a request context; InviteTokensRepository 2026-09-22 18:48:24 +02:00
jubnl e98f86efba fix(server): plan 3a re-review 2 follow-ups — absent-ORM boot branch pinned; airports boot hook never rejects; BOOT-SWEEP-001 asserts the seven routes; duplicate comment removed 2026-09-22 18:13:28 +02:00
jubnl 66703efeb7 feat(db): generated entities declare their repository type; test casts dropped 2026-09-22 18:01:45 +02:00
jubnl 46bb11f508 fix(server): plan 3a re-review follow-ups — plugin boot activation and the airports backfill inside a request context; the supervisor answers the child before failing closed; BOOT-SWEEP-001 drives the real boot hooks; ws adapter seam pinned 2026-09-22 17:39:38 +02:00
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 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 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 c2da9d62f7 refactor(audit): audit log writes through AuditLogRepository 2026-09-22 12:34:49 +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 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 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 869d139412 refactor(reservations, booking-import, calendar, integrations, roadtrip): async DB-touching methods; transactions through UnitOfWork 2026-09-22 06:11:41 +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