16fd4c8c36
Lecteur d'histoires cadenassé pour le coucher (Android/Flutter). - CLAUDE.md : principes craftsmanship/TDD/clean code/clean archi + decisions techniques - ROADMAP.md : suivi haut niveau des 7 jalons, a tenir a jour par etape - docs/specs/ : specs completes decoupees par jalon, etapes en sous-fichiers - .gitignore Flutter (pubspec.lock versionne, projet applicatif) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.2 KiB
2.2 KiB
5.1 — Création du code au premier lancement
Objectif
Au tout premier lancement, obliger le parent à créer un code à 4 chiffres (saisi deux fois pour confirmation) avant d'accéder à l'app.
Périmètre & hors-périmètre
- Inclus : détection « pas de code défini », écran de création (double saisie + validation), enregistrement.
- Exclus : stockage technique détaillé (5.2), porte d'accès (5.3).
Dépendances
Jalon 0. (Le stockage de 5.2 peut être développé en parallèle/avant ; ici on consomme son interface.)
Conception
- Domain (
features/parental/domain/) :ParentalCode(value object) : exactement 4 chiffres ; invariant validé à la construction (sinonErr(InvalidCodeFormat)).ParentalCodeRepository(interface) :Future<bool> isConfigured(),Future<Result<Unit>> setCode(ParentalCode code),Future<bool> verify(ParentalCode code). (Impl. en 5.2.)
- Application :
IsCodeConfiguredUseCase,SetParentalCodeUseCase(refuse si déjà configuré, ou autorise via flux dédié — documenter).
- Presentation :
- Au démarrage,
IsCodeConfiguredUseCasedécide : non configuré →CreateCodeViewbloquant ; configuré → espace enfant. CreateCodeView: saisie 1 + saisie 2, contrôle d'égalité, format 4 chiffres, gros pavé numérique adapté.
- Au démarrage,
Plan TDD
- Red :
parental_code_test.dart—ParentalCode('1234')OK ;'12','12a4',''→ invalides. - Green : implémenter le value object.
- Red :
set_parental_code_use_case_test.dart— délègue àsetCode; refuse si déjà configuré (selon règle documentée). - Green : implémenter.
- Red :
create_code_view_test.dart(widget) — deux saisies différentes → erreur affichée, pas d'enregistrement ; deux saisies égales valides →SetParentalCodeUseCaseappelé. - Green : implémenter l'écran.
- Refactor.
Definition of Done
- Tests value object + use case + widget verts.
- Premier lancement impose la création ; lancement ultérieur ne la redemande pas.
tool/check.shpasse ; étape 5.1 cochée dansROADMAP.md.
Risques / notes
- Ne jamais logguer le code. Le value object ne doit pas exposer la valeur en clair dans
toString.