myYouTube/AGENTS.md
vrubelroman 0ed20bb838 Implement Phases 1-5: skeleton, OAuth, categories, video sync/feed, playback
- 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>
2026-09-16 18:44:30 +00:00

3.6 KiB
Raw Blame History

AGENTS.md

Полное ТЗ: youtube_categories_metube_TZ.md. Перед любой существенной работой сверяйся с ним — этот файл лишь выжимка ограничений.

Жёсткие ограничения (раздел 34 ТЗ)

  1. Не форкать/копировать Tube Archivist.
  2. Не встраивать yt-dlp в этот сервис — скачивание только через существующий MeTube (mediaVM).
  3. Не дублировать функции скачивания MeTube.
  4. Не монтировать media storage MeTube на hermesVM — видео не хранится локально, только проксируется/линкуется.
  5. Не реализовывать YouTube Recommendations/Home.
  6. Не делать multi-user — приложение строго single-user (ALLOWED_GOOGLE_EMAIL).
  7. Frontend не должен напрямую вызывать Google API.
  8. Frontend не должен напрямую вызывать MeTube write API (POST /add и т.п.) — только через наш backend.
  9. Не восстанавливать filename скачанного видео из YouTube title — использовать только точное имя, пришедшее от MeTube по событию completed.
  10. Не удалять существующие файлы MeTube.
  11. Не менять исходный код MeTube.
  12. Все внешние base URL (MeTube, Google) — через env/config, не хардкодить.
  13. REST API должен оставаться пригодным для будущего mobile/PWA клиента.

Порядок фаз (раздел 33 ТЗ)

Не реализовывать следующую фазу, пока не работает предыдущая:

  1. Skeleton (текущая фаза) — FastAPI, PostgreSQL, Alembic, React, Docker Compose, healthcheck.
  2. Google OAuth + subscriptions sync + channels UI.
  3. Categories CRUD + many-to-many + фильтр по категориям.
  4. Video sync/feed (uploads playlists, playlistItems, videos, background scheduler).
  5. YouTube playback (embed).
  6. MeTube integration (/add, download_jobs, Socket.IO consumer, media URL).
  7. 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.