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
3.3 — Persistance des abonnements + CRUD
Objectif
Stocker localement les podcasts auxquels le parent a souscrit, et offrir les use cases pour les lister, ajouter et supprimer.
Périmètre & hors-périmètre
- Inclus : table SQLite des abonnements,
SubscriptionRepository, use cases CRUD, providers. - Exclus : UI de gestion finale (J5) ; cache des épisodes (streaming, pas de cache v1).
Dépendances
3.1, 3.2.
Conception
- Domain (
features/podcasts/domain/) :Subscription(entité) :id,podcast(Podcast),addedAt.SubscriptionRepository(interface) :Future<Result<List<Subscription>>> all()Future<Result<Unit>> add(Podcast podcast)(idempotent surfeedUrl)Future<Result<Unit>> remove(String id)Stream<List<Subscription>> watch()
- Application :
ListSubscriptionsUseCase,AddSubscriptionUseCase(refuse un doublon defeedUrl),RemoveSubscriptionUseCase. - Data (
features/podcasts/data/) :SqliteSubscriptionRepository(sqflite/drift). Tablesubscriptions(id, title, feed_url UNIQUE, artwork_url, author, added_at).- DTO/mapper ligne ↔
Subscription.
- DI : provider du repository ; base ouverte via un provider initialisé au démarrage.
Plan TDD
- Red :
add_subscription_use_case_test.dart— ajout d'un nouveaufeedUrl→Ok; doublon →Err/no-op documenté. - Green : implémenter le use case.
- Red :
list/removeuse cases — délèguent correctement au repo mocké. - Green : implémenter.
- Red :
sqlite_subscription_repository_test.dart— sur une base SQLite en mémoire : add→all renvoie l'élément ; contrainte UNIQUE respectée ; remove supprime ;watchémet après modification. - Green : implémenter le repo + schéma.
- Refactor.
Definition of Done
- Tests use cases + repo (SQLite en mémoire) verts.
- Les abonnements persistent après redémarrage de l'app (vérif. manuelle).
tool/check.shpasse ; étape 3.3 cochée dansROADMAP.md.
Risques / notes
- Migrations : prévoir un numéro de version de schéma dès le départ, même simple.
- Source unique de vérité de la liste = ce repository ; l'UI enfant (J4) lira les épisodes via les abonnements.