Refacto: écritures SQL pilotées par schéma (SqlSchema.void) dans les projecteurs #25
Labels
No labels
bug
enhancement
pr-split
question
security
transaction-matcher
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
momsse/octant#25
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Retour de review sur la PR #59 (comment inline) : les projecteurs écrivent du SQL en interpolant les champs d'event « à la main », sans profiter du couplage schéma offert par
@effect/sql.Aujourd'hui c'est asymétrique :
SqlSchema.findOne/findAll+ unResultschema. ✅active-session.projector.ts/account-token-expiry.projector.ts:@effect/sqlexpose le symétrique de la lecture :SqlSchema.void({ Request, execute }), qui encode l'input via un schéma avant d'exécuter le SQL.Proposition
@octant/postgres-projection: ajouter un helperexecuteWrite(operation, statement: Effect<_, SqlError | SchemaError>)(variante deexecute, qui n'accepte aujourd'hui queSqlError), gérant au même endroit le span et le mappingSqlError/SchemaError→ProjectionError. Un seul endroit, réutilisé par tous les projecteurs.SqlSchema.void+ unRequestschema réutilisant les mêmes codecs que la lecture (Schema.DateTimeUtcFromDate, ids brandés) :postgres-authentication(PR #59) :active-session.projector.ts,account-token-expiry.projector.tspostgres-authorization(PR 11, #11) : projecteurs équivalents — appliquer symétriquement.DELETE … WHERE,UPDATE … WHERE, et les inserts/upserts purementstring(user-lookup).sql.insert/sql.updatene couvrent pasON CONFLICT, donc inutiles pour nos upserts.Pourquoi pas dans la PR #59
PR #59 est merge-ready et la review a convergé ; la refacto est transverse (package partagé + 2 packages infra). On la traite à part pour ne pas rouvrir le cycle de review ni ajouter du drift au snapshot.
Critères d'acceptation
executeWriteschéma-aware dans@octant/postgres-projection(+ tests)new Date(DateTime.toEpochMillis(...))dans les projecteurs ; encodage viaSchema.DateTimeUtcFromDatepostgres-authenticationETpostgres-authorizationmigrées versSqlSchema.voidRequestschemas réutilisent les codecs/brands des read-modelspnpm typecheck/lint/testau vert ; comportement inchangé (tests d'atomicité inline toujours verts)🤖 Generated with Claude Code