40 lines
2.4 KiB
Markdown
40 lines
2.4 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.
|
|
- [ ] **Live validation** (deferred, needs network): confirm the real
|
|
`api.fyyd.de` field shapes against `fyyd/src/api.rs` DTOs — see the
|
|
open gate in `quality/fyyd-provider.md`.
|