- FastAPI + PostgreSQL + Alembic + React/Vite skeleton, Docker Compose, healthcheck - Google OAuth (single allowed account), encrypted refresh token storage - Subscriptions sync with pagination, uploads playlist batch fetch - Categories CRUD, many-to-many channel assignment, category filtering - Video sync (playlistItems + videos.list batching), cached feed with cursor pagination, background scheduler (APScheduler) - Video detail page with YouTube embed player - SPA fallback routing, optimistic UI updates, client-side query caching 40 backend tests covering OAuth allow-list, sync idempotency, cascade deletes, cursor pagination, and category filtering. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
3.6 KiB
3.6 KiB
AGENTS.md
Полное ТЗ: youtube_categories_metube_TZ.md. Перед любой существенной работой сверяйся с ним — этот файл лишь выжимка ограничений.
Жёсткие ограничения (раздел 34 ТЗ)
- Не форкать/копировать Tube Archivist.
- Не встраивать yt-dlp в этот сервис — скачивание только через существующий MeTube (
mediaVM). - Не дублировать функции скачивания MeTube.
- Не монтировать media storage MeTube на
hermesVM— видео не хранится локально, только проксируется/линкуется. - Не реализовывать YouTube Recommendations/Home.
- Не делать multi-user — приложение строго single-user (
ALLOWED_GOOGLE_EMAIL). - Frontend не должен напрямую вызывать Google API.
- Frontend не должен напрямую вызывать MeTube write API (
POST /addи т.п.) — только через наш backend. - Не восстанавливать filename скачанного видео из YouTube title — использовать только точное имя, пришедшее от MeTube по событию
completed. - Не удалять существующие файлы MeTube.
- Не менять исходный код MeTube.
- Все внешние base URL (MeTube, Google) — через env/config, не хардкодить.
- REST API должен оставаться пригодным для будущего mobile/PWA клиента.
Порядок фаз (раздел 33 ТЗ)
Не реализовывать следующую фазу, пока не работает предыдущая:
- Skeleton (текущая фаза) — FastAPI, PostgreSQL, Alembic, React, Docker Compose, healthcheck.
- Google OAuth + subscriptions sync + channels UI.
- Categories CRUD + many-to-many + фильтр по категориям.
- Video sync/feed (uploads playlists, playlistItems, videos, background scheduler).
- YouTube playback (embed).
- MeTube integration (
/add, download_jobs, Socket.IO consumer, media URL). - Hardening (retry/recovery, logging, quota handling, tests, README).
Структура и соглашения
migrations/— Alembic, живёт в корне репозитория (не внутриbackend/), импортирует модели изbackend/app.- Схема БД добавляется миграциями инкрементально по фазам (см. раздел 11 ТЗ), а не одним махом в Phase 1.
- MeTube-специфичные HTTP/Socket.IO вызовы должны быть инкапсулированы в отдельный класс
MeTubeClient(раздел 36 ТЗ) — не размазывать по backend. - Секреты только через
.env(см..env.example), никогда не коммитить.env, refresh token, client secret. - Backend тесты —
pytest, лежат вtests/в корне. Integration-тесты против Google/MeTube — mocked по умолчанию; реальные вызовы кhttp://192.168.8.177:8081— только opt-in, не в обычном CI.
Запуск/проверка
См. README.md. Быстрая проверка: docker compose up -d --build и curl http://localhost:8080/api/health.