Table: subtitle_files - id (PK) - movie_id (FK → movies.id) - language (e.g., 'en') - format (enum: srt, vtt, ass) - version (varchar, e.g., 'v1.0') - file_path (storage location) - license (varchar) - attribution (text) - uploader_id (FK → users.id, nullable) - status (enum: pending, approved, rejected) - download_count (int, default 0) - created_at - updated_at - last_reviewed_at - reviewer_id (FK → users.id, nullable)

[Download Button] (large, primary) [Copy Direct Link] (clipboard) [QR Code] (mobile scan) Movie: Private Teacher A (auto‑filled) Language: English (fixed) Subtitle Format: [SRT ▼] Version: auto‑generated (v1.2) License: [CC‑BY‑SA] [All‑Rights‑Reserved] [Custom]

Table: subtitle_previews - id (PK) - subtitle_file_id (FK) - video_clip_url (public preview video) - start_timestamp (int, seconds) - end_timestamp (int, seconds) - created_at All timestamps stored in UTC. | Method | Path | Description | Auth | |--------|------|-------------|------| | GET | /api/movies?search=private+teacher+a | Search movies (autocomplete). | Public | | GET | /api/movies/movie_id | Movie details + list of subtitle versions. | Public | | GET | /api/subtitles/subtitle_id | Metadata (download URL, preview URL, stats). | Public | | GET | /api/subtitles/subtitle_id/download?format=srt | Redirect to CDN‑hosted file. | Public (rate‑limited) | | POST | /api/subtitles/movie_id/upload | Upload new subtitle version. | Auth (registered) | | POST | /api/subtitles/subtitle_id/review | Approve/Reject with comment. | Auth (moderator) | | GET | /api/subtitles/subtitle_id/history | List all previous versions. | Public | | GET | /api/subtitles/subtitle_id/preview | Returns JSON with preview video URL and timestamps. | Public |