refactor(download): mark episode downloaded instead of deleting
Change _remove_episode_from_missing_list to set is_downloaded=True and populate file_path via EpisodeService.mark_downloaded, instead of deleting the Episode row. Preserves download history so queries can distinguish series with downloaded episodes from completely unwatched series. - Pass serie_folder to construct file_path - Look up series_id via AnimeSeriesService.get_by_key - Update tests to mock mark_downloaded path - Document episode lifecycle in docs/DEVELOPMENT.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -82,6 +82,22 @@ The download queue prevents duplicate entries at two levels:
|
||||
- 5-minute cooldown prevents rapid re-triggers
|
||||
- Checked at start of `_auto_download_missing()`
|
||||
|
||||
### Episode Lifecycle
|
||||
|
||||
Episodes transition through states stored in the `episodes` table:
|
||||
|
||||
| State | `is_downloaded` | `file_path` | Description |
|
||||
|-------|----------------|-------------|-------------|
|
||||
| Missing | `False` | `NULL` | Episode not yet downloaded |
|
||||
| Downloaded | `True` | Set | Episode exists on disk |
|
||||
|
||||
**State Transitions:**
|
||||
1. **Missing → Downloaded**: When download completes, `_remove_episode_from_missing_list()` calls `EpisodeService.mark_downloaded()` to set `is_downloaded=True` and populate `file_path`. The episode record is NOT deleted.
|
||||
|
||||
**Query Implications:**
|
||||
- `get_series_with_missing_episodes()`: Filters for `is_downloaded=False` to find series with undownloaded episodes
|
||||
- `get_series_with_no_episodes()`: Finds series with `is_downloaded=False` episodes but NO `is_downloaded=True` episodes (completely unwatched series)
|
||||
|
||||
### Mocking the Download Queue
|
||||
|
||||
When testing components that use the download queue:
|
||||
|
||||
Reference in New Issue
Block a user