PR 04b — Authentication : statut User en value object tagué #15
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#15
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?
Tranche intercalaire du découpage de
feat/authentication(plan :docs/pr-split/feat-authentication.md), issue du retour de review de la PR 04 (#34) sur les gardes de statut.Branche :
split/04b-user-status-value-object— Bloquée par : #4À merger avant : #5 (PR 05) — les seuls call-sites aval de
UserState.status(authenticate.use-case.ts, 2 lectures) s'extrairont directement contre le nouveau modèle.Taille : ~4 fichiers (1 value object nouveau,
user.state.ts,user.aggregate.ts+ tests)Motivation
UserStateporte aujourd'hui un littéralstatus+ 4 champs nullables (suspensionReason,suspendedAt,anonymizedAt,deletedAt) dont la validité dépend du statut — rien n'empêche un état illégal (status: 'active'avecsuspendedAtrenseigné). Les méthodesdecide*du cycle de vie dupliquent 4 échellesif status === ...aux ordres divergents (relevé en review de la PR 04).Design
application/value-objects/user-lifecycle.value-object.ts:UserState— les états illégaux deviennent irreprésentables.decideSuspendUser/decideReactivateUser/decideAnonymizeUser/decideDeleteUsers'effondrent en unMatch.exhaustivepartagé — un futur statut (locked, …) casse la compilation partout où il faut décider au lieu de passer silencieusement.UserNotFoundErrordans les 5 commandes active-only, describestatus disclosure) est conservé tel quel — ce refactor change la modélisation, pas le comportement.UserNotActiveError(qui transporte le littéral du statut) s'adapte ici ; encode du tag vers le littéral à la frontière si besoin.Impact aval (mesuré sur la branche de référence)
authenticate.use-case.ts: 2 lectures decursor.state.status→ adaptation à l'extraction PR 05.user.statussur le read modelUserSummary(UserDirectory), pas surUserState— non impacté.Focus review
Équivalence comportementale stricte avec la PR 04 (les 130 tests existants doivent passer sans changement d'assertions, seuls les fixtures/constructions d'état changent), exhaustivité des Match, disparition effective des champs nullables de
UserState.