# Task 5: Watchlist API Structure Documentation ## Base URL `http://localhost:3000/api/watchlist` ## Available Endpoints ### 1. GET /api/watchlist - **Description**: List all watchlist items for current user - **Auth**: Required (JWT Bearer token) - **Query Params**: - `status` (optional): Filter by status (active, paused, completed, archived) - **Response 200**: `{"watchlist": [], "total": 0, "filters": {"status": null}}` - **Response 403**: `{"detail": "Not authenticated"}` ### 2. POST /api/watchlist - **Description**: Add a new anime to the watchlist - **Auth**: Required - **Body**: ```json { "anime_title": "string", "anime_url": "string", "provider_id": "string", "lang": "vostfr", "auto_download": true, "quality_preference": "auto", "poster_image": "string (optional)", "cover_image": "string (optional)", "synopsis": "string (optional)", "genres": ["string"] (optional) } ``` - **Response**: `{"status": "added", "item": {...}}` ### 3. GET /api/watchlist/{item_id} - **Description**: Get details of a specific watchlist item - **Auth**: Required - **Response 200**: `{"item": {...}}` - **Response 404**: `{"detail": "Watchlist item not found"}` - **Response 403**: `{"detail": "Access denied"}` ### 4. PUT /api/watchlist/{item_id} - **Description**: Update a watchlist item - **Auth**: Required - **Response**: `{"status": "updated", "item": {...}}` ### 5. DELETE /api/watchlist/{item_id} - **Description**: Remove an anime from the watchlist - **Auth**: Required - **Response**: `{"status": "deleted", "item_id": "string"}` ### 6. GET /api/watchlist/{item_id}/episodes - **Description**: Get all downloaded episodes for a watchlist item - **Auth**: Required ### 7. POST /api/watchlist/{item_id}/download/{episode} - **Description**: Download a specific episode - **Auth**: Required - **Response**: `{"status": "downloading", "task_id": "string", "episode": int, "item_id": "string"}` ### 8. GET /api/watchlist/stats ⚠️ BUG - **Description**: Get watchlist statistics - **Auth**: Required - **Expected Response**: ```json { "total": 0, "active": 0, "paused": 0, "completed": 0, "archived": 0, "auto_download_enabled": 0, "total_episodes_downloaded": 0, "providers": {} } ``` - **Actual Response**: 404 "Watchlist item not found" (ROUTING BUG) ### 9. GET /api/watchlist/settings ⚠️ BUG - **Description**: Get watchlist settings - **Auth**: Required - **Expected Response**: `{"settings": {...}}` - **Actual Response**: 404 "Watchlist item not found" (ROUTING BUG) ### 10. GET /api/watchlist/notifications ⚠️ BUG - **Description**: Get user notifications - **Auth**: Required - **Query Params**: `unread_only` (bool) - **Expected Response**: `{"notifications": [], "total": 0, "unread_only": false}` - **Actual Response**: 404 "Watchlist item not found" (ROUTING BUG) ### 11. PUT /api/watchlist/notifications/{notification_id}/read - **Description**: Mark a notification as read - **Auth**: Required ### 12. PUT /api/watchlist/settings - **Description**: Update watchlist settings - **Auth**: Required ## Authentication - Uses JWT Bearer tokens - Token obtained from POST /api/auth/login - Pass as: `Authorization: Bearer ` ## Bug Summary - **Issue**: 3 endpoints return 404 instead of correct responses - **Affected**: /stats, /settings, /notifications - **Cause**: Route ordering - `/{item_id}` catch-all defined before these specific routes - **Location**: app/routes/watchlist.py - **Fix needed**: Move specific routes BEFORE the `/{item_id}` route