3dc5dd8fe9
- Fix register/login: dict-style access on UserTable ORM objects - Fix HTMX auth: inject JWT token in all HTMX request headers - Fix FS7 search: use DLE AJAX endpoint /engine/ajax/search.php - Fix ZT search: use ?p=series&search=QUERY (not DLE format) - Fix provider health: load hardcoded providers + domain manager - Add self.id to all anime/series providers - Redesign homepage: Netflix-style horizontal scroll cards (.hc) - Redesign search results: grouped by title, poster + synopsis + 3 buttons - Add Télécharger dropdown: season download + episode picker - Fix navbar CSS: restore .tabs flex layout, remove orphan rules - Fix HTMX spinner: remove inline display:none, use CSS indicator - Add AGENTS.md files across project for developer documentation
38 lines
2.1 KiB
Markdown
38 lines
2.1 KiB
Markdown
# Routers (app/routers/)
|
|
|
|
## OVERVIEW
|
|
11 FastAPI APIRouter modules, each owning a URL prefix. All registered in `main.py:118-144`.
|
|
|
|
## WHERE TO LOOK
|
|
|
|
| Router | File | Prefix | Purpose |
|
|
|--------|------|--------|---------|
|
|
| root_router | `router_root.py` | `/`, `/web` | Index page, web UI |
|
|
| auth_router | `router_auth.py` | `/api/auth` | Register, login, JWT tokens |
|
|
| downloads_router | `router_downloads.py` | `/api/download` | Task CRUD, pause/resume, file serve |
|
|
| anime_router | `router_anime.py` | `/api/anime`, `/api/series` | Search, metadata, episodes, season download |
|
|
| favorites_router | `router_favorites.py` | `/api/favorites` | Favorites toggle, list |
|
|
| recommendations_router | `router_recommendations.py` | `/api/recommendations`, `/api/releases` | Personalized + latest releases |
|
|
| watchlist_router | `router_watchlist.py` | `/api/watchlist` | Watchlist CRUD, scheduler, auto-download |
|
|
| sonarr_router | `router_sonarr.py` | `/api/sonarr`, `/api/webhook/sonarr` | Webhook receiver, mappings |
|
|
| player_router | `router_player.py` | `/player`, `/watch` | Video player pages |
|
|
| static_router | `router_static.py` | `/static`, `/video` | Static files, video streaming (Range) |
|
|
| settings_router | `router_settings.py` | `/api/settings` | User app settings |
|
|
|
|
## CONVENTIONS
|
|
|
|
**Adding endpoints**: Identify the correct router by URL prefix → add to that file → import in `app/routers/__init__.py` (if new router) → register in `main.py`.
|
|
|
|
**Shared dependencies** (via FastAPI `Depends`):
|
|
- `download_manager: DownloadManager = Depends(lambda: download_manager)` — singleton from main.py
|
|
- `current_user: User = Depends(get_current_user_from_token)` — JWT auth
|
|
- `templates: Jinja2Templates = Depends(lambda: templates)` — Jinja2 renderer
|
|
|
|
**Router registration** in `main.py` uses `app.include_router(router)`. Tags set per-router for OpenAPI.
|
|
|
|
## ANTI-PATTERNS
|
|
|
|
- Do NOT create a new router for a single endpoint — add to existing matching router
|
|
- Do NOT use `Depends()` with direct module imports that create circular references
|
|
- Do NOT duplicate URL prefixes across routers
|