Files
storytime/docs/specs/jalon-3-podcasts/01-recherche-itunes.md
T
Vincent Bourdon 16fd4c8c36 docs: cadrage initial Storytime (specs par jalon, roadmap, CLAUDE.md)
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>
2026-06-19 17:03:33 +02:00

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 → Err ou liste vide selon choix documenté).
  • Data (features/podcasts/data/) :
    • ItunesPodcastSearchRepository : appelle https://itunes.apple.com/search?media=podcast&term=....
    • DTO ItunesResultDto + mapper → Podcast (feedUrl = champ feedUrl d'iTunes).
    • Client HTTP injecté (interface fine) pour testabilité ; erreurs réseau → SearchFailure.

Plan TDD

  1. 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) ou Ok([])).
  2. Green : implémenter le use case.
  3. Red : itunes_podcast_search_repository_test.dart — client HTTP mocké renvoyant un JSON iTunes d'exemple → liste de Podcast correctement mappée ; HTTP 500 / timeout → SearchFailure.
  4. Green : implémenter repo + mapper.
  5. Refactor.

Definition of Done

  • Tests use case + repository verts (HTTP mocké, fixture JSON iTunes).
  • tool/check.sh passe ; étape 3.1 cochée dans ROADMAP.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).