Complete download queue SQLite migration: documentation and cleanup
- Updated infrastructure.md with queue database schema and storage details - Updated instructions.md to mark migration task as completed - No deprecated JSON code remains in codebase
This commit is contained in:
@@ -164,20 +164,68 @@ All series-related WebSocket events include `key` as the primary identifier in t
|
||||
- `AnimeSeriesService.get_by_id(id)` - Internal lookup by database ID
|
||||
- No `get_by_folder()` method exists - folder is never used for lookups
|
||||
|
||||
### DownloadQueueItem Fields
|
||||
|
||||
| Field | Type | Purpose |
|
||||
| -------------- | ----------- | --------------------------------------------- |
|
||||
| `id` | String (PK) | UUID for the queue item |
|
||||
| `serie_id` | String | Series key for identification |
|
||||
| `serie_folder` | String | Filesystem folder path |
|
||||
| `serie_name` | String | Display name for the series |
|
||||
| `season` | Integer | Season number |
|
||||
| `episode` | Integer | Episode number |
|
||||
| `status` | Enum | pending, downloading, completed, failed |
|
||||
| `priority` | Enum | low, normal, high |
|
||||
| `progress` | Float | Download progress percentage (0.0-100.0) |
|
||||
| `error` | String | Error message if failed |
|
||||
| `retry_count` | Integer | Number of retry attempts |
|
||||
| `added_at` | DateTime | When item was added to queue |
|
||||
| `started_at` | DateTime | When download started (nullable) |
|
||||
| `completed_at` | DateTime | When download completed/failed (nullable) |
|
||||
|
||||
## Data Storage
|
||||
|
||||
### Storage Architecture
|
||||
|
||||
The application uses **SQLite database** as the primary storage for anime series metadata. This replaces the legacy file-based storage system.
|
||||
The application uses **SQLite database** as the primary storage for all application data.
|
||||
|
||||
| Storage Method | Status | Location | Purpose |
|
||||
| -------------- | --------------------- | -------------------- | ----------------------------- |
|
||||
| SQLite DB | **Primary (Current)** | `data/aniworld.db` | All series metadata and state |
|
||||
| Data Files | **Deprecated** | `{anime_dir}/*/data` | Legacy per-series JSON files |
|
||||
| Data Type | Storage Location | Service |
|
||||
| --------------- | ------------------ | ---------------------------- |
|
||||
| Anime Series | `data/aniworld.db` | `AnimeSeriesService` |
|
||||
| Episodes | `data/aniworld.db` | `AnimeSeriesService` |
|
||||
| Download Queue | `data/aniworld.db` | `DownloadService` via `QueueRepository` |
|
||||
| User Sessions | `data/aniworld.db` | `AuthService` |
|
||||
| Configuration | `data/config.json` | `ConfigService` |
|
||||
|
||||
### Database Storage (Recommended)
|
||||
### Download Queue Storage
|
||||
|
||||
All new series are stored in the SQLite database via `AnimeSeriesService`:
|
||||
The download queue is stored in SQLite via `QueueRepository`, which wraps `DownloadQueueService`:
|
||||
|
||||
```python
|
||||
# QueueRepository provides async operations for queue items
|
||||
repository = QueueRepository(session_factory)
|
||||
|
||||
# Save item to database
|
||||
saved_item = await repository.save_item(download_item)
|
||||
|
||||
# Get pending items (ordered by priority and add time)
|
||||
pending = await repository.get_pending_items()
|
||||
|
||||
# Update item status
|
||||
await repository.update_status(item_id, DownloadStatus.COMPLETED)
|
||||
|
||||
# Update download progress
|
||||
await repository.update_progress(item_id, progress=45.5, downloaded=450, total=1000, speed=2.5)
|
||||
```
|
||||
|
||||
**Queue Persistence Features:**
|
||||
- Queue state survives server restarts
|
||||
- Items in `downloading` status are reset to `pending` on startup
|
||||
- Failed items within retry limit are automatically re-queued
|
||||
- Completed and failed history is preserved (with limits)
|
||||
- Real-time progress updates are persisted to database
|
||||
|
||||
### Anime Series Database Storage
|
||||
|
||||
```python
|
||||
# Add series to database
|
||||
|
||||
Reference in New Issue
Block a user