crabidy/plan/fyyd-provider.md

41 lines
2.5 KiB
Markdown

# Plan — fyyd podcast provider
From `architecture/fyyd-provider.md` and `quality/fyyd-provider.md`. Ordered
by dependency; each task names how it is verified.
- [x] **HTTP seam** (`fyyd/src/api.rs`): `Fyyd` trait
(`search_podcasts`, `hot_podcasts`, `podcast_episodes`, `episode`),
domain `Podcast`/`Episode`, typed `FetchError`, and the `reqwest`
`FyydApi` (envelope unwrap, defensive DTOs, per-call timeout, artist
backfill via a `/podcast` lookup). Verify: it compiles; used by the
provider tests via a fake.
- [x] **Crate skeleton** (`fyyd/Cargo.toml`, workspace `members` + dep):
new `fyyd` crate depending on `crabidy-core`, `reqwest`, `serde`,
`thiserror`, `tokio`, `toml`, `tracing`, `async-trait`. Verify:
`cargo build -p fyyd`.
- [x] **Path model** (`fyyd/src/lib.rs`): `FyydPath` enum + `parse_path`
covering root/search/term/podcast/episode and hot/podcast/episode;
empty segments rejected. Verify: `foreign_and_malformed_paths_are_rejected`.
- [x] **Provider core** (`fyyd/src/lib.rs`): `Client` (`Box<dyn Fyyd>` +
settings + in-memory search terms), `Settings` (`fyyd.toml`), the
`ProviderClient` impl (root, node dispatch, podcast/episode builders,
stream + metadata resolution, create/rename/delete of terms, central
download blessing). Verify: the 10 unit tests in `fyyd/src/lib.rs`.
- [x] **Settings registration** (`crabidy-server/src/settings.rs`): add
`fyyd` to `ALL_PROVIDERS`, `ProviderToggles`, `all()`, and
`provider_toggles()`. Verify: existing settings tests (they iterate
`ALL_PROVIDERS`); `cargo test -p crabidy-server`.
- [x] **Orchestrator wiring** (`crabidy-server/src/provider.rs`):
`fyyd_client` field, `fyyd_owns`/`fyyd_provider`, non-fatal `build()`
block reading `fyyd.toml`, `get_lib_root` child, and a routing arm in
each of the eight `ProviderClient` methods. Verify: `cargo build`,
full server suite green.
- [x] **Gates**: `cargo test -p fyyd -p crabidy-server`, `cargo clippy`,
`cargo fmt --check` all clean; check off `quality/fyyd-provider.md`.
- [x] **Docs**: architecture + quality + plan committed; user docs
(`docs/src/`, README provider list) updated.
- [x] **Live validation**: confirmed the real `api.fyyd.de` field shapes
against `fyyd/src/api.rs` DTOs (2026-07-23) — all four endpoints match,
no DTO change needed. A manual audio/`W`-capture smoke test on the
running server remains open in `quality/fyyd-provider.md`.