31 lines
3.3 KiB
Markdown
31 lines
3.3 KiB
Markdown
# AGENTS.md
|
||
|
||
Правила для персонального YouTube-клиента с категориями подписок и интеграцией с существующим MeTube. Основные этапы разработки (каркас, OAuth/подписки, категории, лента, воспроизведение и MeTube) уже реализованы; ориентируйся на фактический код и `README.md`.
|
||
|
||
## Архитектурные ограничения
|
||
|
||
1. Не форкать/копировать Tube Archivist.
|
||
2. Не встраивать yt-dlp в этот сервис — скачивание выполняет существующий MeTube на `mediaVM`.
|
||
3. Не дублировать функции скачивания MeTube.
|
||
4. Не монтировать media storage MeTube на `hermesVM`: видео не хранится локально, только проксируется или линкуется.
|
||
5. Не реализовывать YouTube Recommendations/Home.
|
||
6. Приложение остаётся single-user (`ALLOWED_GOOGLE_EMAIL`).
|
||
7. Frontend не вызывает Google API напрямую.
|
||
8. Frontend не вызывает MeTube write API (`POST /add` и т.п.) напрямую — только через наш backend.
|
||
9. Не восстанавливать имя скачанного файла из YouTube title: использовать точное имя из события MeTube `completed`.
|
||
10. Не удалять существующие файлы MeTube при синхронизации или обслуживании; удаление по явному действию пользователя — отдельный поддерживаемый сценарий.
|
||
11. Не менять исходный код MeTube.
|
||
12. Все внешние base URL (MeTube, Google) задаются через env/config.
|
||
13. REST API должен оставаться пригодным для будущего mobile/PWA клиента.
|
||
|
||
## Структура и соглашения
|
||
|
||
- `migrations/` — Alembic в корне репозитория; миграции импортируют модели из `backend/app`. Схему БД изменять миграциями, не создавать и не менять ad hoc при старте приложения.
|
||
- MeTube-специфичные HTTP/Socket.IO вызовы инкапсулировать в `MeTubeClient`, не размазывать по backend.
|
||
- Секреты хранить только в `.env` (образец — `.env.example`); не коммитить `.env`, refresh token или client secret.
|
||
- Backend тесты — `pytest` в корневом `tests/`. Интеграции с Google/MeTube по умолчанию mock; реальные вызовы к `http://192.168.8.177:8081` — только opt-in, не в обычном CI.
|
||
- В unit-тестах использовать `TestClient(app)` без `with`: контекстный менеджер запускает lifespan с подключением к MeTube (Socket.IO) и Postgres (`reconcile_on_startup`).
|
||
|
||
## Запуск и проверка
|
||
|
||
См. `README.md`. Быстрая проверка: `docker compose up -d --build` и `curl http://localhost:8080/api/health`.
|