Production logs showed a job oscillating downloading -> completed -> downloading -> completed -> postprocessing -> completed. Cause: yt-dlp reports status='finished' via progress-hook ticks once per stream when downloading separate video+audio for muxing (video lands, audio is still in flight), and MeTube forwards that through 'updated' Socket.IO events too -- we were mapping any status='finished' to our "completed", regardless of which event carried it. Only the dedicated 'completed' event (and the 'done' bucket of MeTube's /history, for startup reconciliation) is now treated as authoritative for terminal status; a transient 'finished' arriving via 'added'/'updated' (or history's queue/pending) is a no-op for status, matching the progress_percent update it also carries. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| backend | ||
| frontend | ||
| migrations | ||
| tests | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| alembic.ini | ||
| compose.yml | ||
| Dockerfile | ||
| entrypoint.sh | ||
| pyproject.toml | ||
| README.md | ||
| UI_UX_spec.md | ||
| youtube_categories_metube_TZ.md | ||
MyYouTube
Персональный YouTube-клиент с категориями подписок и интеграцией с существующим MeTube.
Полное техническое задание: youtube_categories_metube_TZ.md.
Текущий статус: Phase 1 — skeleton (FastAPI backend, PostgreSQL, Alembic, React frontend, Docker Compose, healthcheck).
Стек
- Backend: Python 3.13, FastAPI, SQLAlchemy 2.x, Alembic, Pydantic Settings
- Frontend: React, TypeScript, Vite, React Router, TanStack Query
- DB: PostgreSQL 16
- Deployment: Docker Compose
Запуск в production (Docker Compose)
-
Скопируй
.env.exampleв.envи заполни значения (Google OAuth credentials, секреты, MeTube URLs). -
Собери и запусти:
docker compose up -d --build -
Проверь health:
curl http://localhost:8080/api/health
Миграции Alembic применяются автоматически при старте контейнера app (см. entrypoint.sh).
Локальная разработка
Backend
cd backend
uv venv .venv
uv pip install -p .venv -r requirements-dev.txt
source .venv/bin/activate
cd ..
DATABASE_URL=postgresql+psycopg://youtube_app:password@localhost:5432/youtube_app \
APP_SECRET_KEY=dev APP_SECRET_KEY=dev TOKEN_ENCRYPTION_KEY=dev \
alembic upgrade head
uvicorn app.main:app --reload --app-dir backend --port 8080
Тесты:
backend/.venv/bin/python -m pytest tests/ -v
Frontend
cd frontend
npm install
npm run dev
Dev-сервер Vite проксирует /api/* на http://127.0.0.1:8080 (см. vite.config.ts).
Миграции
alembic revision -m "описание"
alembic upgrade head
alembic.ini и папка migrations/ находятся в корне проекта и подключают модели из backend/app.
Структура проекта
myyoutube/
├── backend/ # FastAPI приложение
├── frontend/ # React SPA
├── migrations/ # Alembic migrations
├── tests/ # backend tests (pytest)
├── Dockerfile
├── compose.yml
├── .env / .env.example
└── youtube_categories_metube_TZ.md
Секреты
.env в .gitignore, не коммитится. Обязательные секреты: APP_SECRET_KEY, TOKEN_ENCRYPTION_KEY, GOOGLE_CLIENT_SECRET, POSTGRES_PASSWORD.