90 lines
2.5 KiB
Markdown
90 lines
2.5 KiB
Markdown
|
|
# MyYouTube
|
|||
|
|
|
|||
|
|
Персональный YouTube-клиент с категориями подписок и интеграцией с существующим MeTube.
|
|||
|
|
Полное техническое задание: [`youtube_categories_metube_TZ.md`](./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)
|
|||
|
|
|
|||
|
|
1. Скопируй `.env.example` в `.env` и заполни значения (Google OAuth credentials, секреты, MeTube URLs).
|
|||
|
|
2. Собери и запусти:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
docker compose up -d --build
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. Проверь health:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
curl http://localhost:8080/api/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Миграции Alembic применяются автоматически при старте контейнера `app` (см. `entrypoint.sh`).
|
|||
|
|
|
|||
|
|
## Локальная разработка
|
|||
|
|
|
|||
|
|
### Backend
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
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
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Тесты:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
backend/.venv/bin/python -m pytest tests/ -v
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Frontend
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd frontend
|
|||
|
|
npm install
|
|||
|
|
npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Dev-сервер Vite проксирует `/api/*` на `http://127.0.0.1:8080` (см. `vite.config.ts`).
|
|||
|
|
|
|||
|
|
## Миграции
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
alembic revision -m "описание"
|
|||
|
|
alembic upgrade head
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`alembic.ini` и папка `migrations/` находятся в корне проекта и подключают модели из `backend/app`.
|
|||
|
|
|
|||
|
|
## Структура проекта
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
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`.
|