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.1 KiB
2.1 KiB
3.1 — Recherche annuaire (iTunes Search)
Objectif
Permettre au parent de rechercher un podcast par mots-clés et d'obtenir une liste de résultats (titre, image, URL du flux RSS) prêts à être ajoutés.
Périmètre & hors-périmètre
- Inclus : domaine
Podcast/PodcastSearchResult, interface de recherche, impl. HTTP iTunes Search, use case, mapping DTO. - Exclus : ajout/persistance (3.2/3.3), UI parent finale (J5).
Dépendances
Jalon 0.
Conception
- Domain (
features/podcasts/domain/) :Podcast(entité) :id,title,feedUrl,artworkUrl?,author?.PodcastSearchRepository(interface) :Future<Result<List<Podcast>>> search(String query).PodcastFailure:SearchFailure,InvalidFeedFailure,FeedUnreachableFailure.
- Application :
SearchPodcastsUseCase(trim/garde-fou requête vide →Errou liste vide selon choix documenté). - Data (
features/podcasts/data/) :ItunesPodcastSearchRepository: appellehttps://itunes.apple.com/search?media=podcast&term=....- DTO
ItunesResultDto+ mapper →Podcast(feedUrl= champfeedUrld'iTunes). - Client HTTP injecté (interface fine) pour testabilité ; erreurs réseau →
SearchFailure.
Plan TDD
- Red :
search_podcasts_use_case_test.dart— requête non vide délègue au repo ; requête vide → comportement défini (documenter :Err(SearchFailure)ouOk([])). - Green : implémenter le use case.
- Red :
itunes_podcast_search_repository_test.dart— client HTTP mocké renvoyant un JSON iTunes d'exemple → liste dePodcastcorrectement mappée ; HTTP 500 / timeout →SearchFailure. - Green : implémenter repo + mapper.
- Refactor.
Definition of Done
- Tests use case + repository verts (HTTP mocké, fixture JSON iTunes).
tool/check.shpasse ; étape 3.1 cochée dansROADMAP.md.
Risques / notes
- Les résultats iTunes peuvent être larges/inadaptés ; le filtrage fin relève du parent (il choisit). Ne pas sur-filtrer côté code en v1.
- Certains résultats n'ont pas de
feedUrl: les écarter du résultat (un podcast sans flux n'est pas exploitable).