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.2 — Ajout par URL RSS
Objectif
Permettre au parent de coller l'URL d'un flux RSS, d'en obtenir un aperçu (titre,
image, nombre d'épisodes) et de récupérer les épisodes mappés vers Episode.
Périmètre & hors-périmètre
- Inclus : récupération + parsing RSS, validation de l'URL, aperçu du podcast, mapping items RSS →
Episode(feature playback). - Exclus : persistance (3.3), UI finale (J5).
Dépendances
3.1 (entité Podcast, PodcastFailure), 2.1 (Episode).
Conception
- Domain (
features/podcasts/domain/) :- Étendre
PodcastSearchRepositoryou ajouterFeedRepository:Future<Result<Podcast>> fetchFeedPreview(Uri feedUrl)(titre/image depuis le flux).Future<Result<List<Episode>>> fetchEpisodes(Uri feedUrl).
- Étendre
- Application :
PreviewFeedUseCase(valide l'URL : schéma http/https, non vide → sinonInvalidFeedFailure).LoadEpisodesUseCase.
- Data :
RssFeedRepositoryviadart_rss(ouwebfeed) + client HTTP injecté.- Mapper RSS item →
Episode:title,audioUrl=enclosure.url,duration(itunes:duration si présent),artworkUrl. - Items sans enclosure audio → ignorés (pas une histoire jouable).
- Erreurs : flux illisible →
InvalidFeedFailure; réseau →FeedUnreachableFailure.
Plan TDD
- Red :
preview_feed_use_case_test.dart— URL vide / non http →Err(InvalidFeedFailure); URL valide délègue au repo. - Green : implémenter validation + use case.
- Red :
rss_feed_repository_test.dart— fixture XML RSS d'exemple →Podcast(aperçu) etList<Episode>corrects ; item sans enclosure ignoré ; XML invalide →InvalidFeedFailure; HTTP KO →FeedUnreachableFailure. - Green : implémenter repo + mapper.
- Refactor.
Definition of Done
- Tests verts avec fixtures RSS (cas nominal, item sans audio, XML invalide).
tool/check.shpasse ; étape 3.2 cochée dansROADMAP.md.
Risques / notes
- Diversité des flux RSS podcast (champs optionnels, namespaces itunes). Prévoir des fixtures variées.
- Garder le mapping RSS→
Episodeici (feature podcasts), conformément à la note de 2.1.