diff --git a/DOC/СПРИНТЫ.md b/DOC/СПРИНТЫ.md index ceaf089..7cc1f04 100644 --- a/DOC/СПРИНТЫ.md +++ b/DOC/СПРИНТЫ.md @@ -11,30 +11,37 @@ --- -## Спринт 1 — Инфраструктура + Создание тестов +## Спринт 1 — Инфраструктура + Создание тестов ✅ **Результат:** Поднят весь стек, можно зайти на страницу и создать тест. +**Статус:** Завершён и протестирован вручную в браузере. ### Инфраструктура -- [ ] Структура репозитория: `backend/`, `frontend/`, `nginx/`, `docker-compose.yml` -- [ ] `docker-compose.yml`: сервисы `db`, `backend`, `frontend`, `nginx` -- [ ] PostgreSQL: контейнер, volume для данных -- [ ] FastAPI: контейнер, `GET /api/health` → `{"status": "ok"}` -- [ ] Alembic: инициализирован, первая миграция (пустая схема) -- [ ] React + Vite: контейнер, базовая страница открывается в браузере -- [ ] Nginx: `/` → React SPA, `/api/` → FastAPI +- [x] Структура репозитория: `backend/`, `frontend/`, `nginx/`, `docker-compose.yml` +- [x] `docker-compose.yml`: сервисы `db`, `backend`, `frontend`, `nginx` +- [x] PostgreSQL: контейнер, volume для данных +- [x] FastAPI: контейнер, `GET /api/health` → `{"status": "ok"}` +- [x] Alembic: инициализирован, первая миграция (`001_init`) +- [x] React + Vite: контейнер, базовая страница открывается в браузере +- [x] Nginx: `/` → React SPA, `/api/` → FastAPI ### Создание тестов (без авторизации) -- [ ] Модели БД: `Test`, `Question`, `Answer` -- [ ] API: `POST /api/tests` — создать тест с вопросами и ответами -- [ ] API: `GET /api/tests` — список тестов -- [ ] API: `GET /api/tests/{id}` — детали теста -- [ ] Фронт: страница создания теста (название, вопросы, варианты, настройки) -- [ ] Фронт: список тестов -- [ ] Фронт: страница просмотра теста +- [x] Модели БД: `Test`, `Question`, `Answer` +- [x] API: `POST /api/tests` — создать тест с вопросами и ответами +- [x] API: `GET /api/tests` — список тестов +- [x] API: `GET /api/tests/{id}` — детали теста +- [x] Фронт: страница создания теста (название, вопросы, варианты, настройки) +- [x] Фронт: список тестов +- [x] Фронт: страница просмотра теста **Настройки теста:** порог зачёта (%), таймер (опционально), разрешить возврат к предыдущему вопросу +### Баги, найденные и исправленные при тестировании +- [x] `permission denied` на `entrypoint.sh` — volume mount перекрывал `chmod +x` из Dockerfile → исправлено: `CMD ["bash", "entrypoint.sh"]` +- [x] `No module named 'app'` в Alembic — Python не видел `/app` → исправлено: `ENV PYTHONPATH=/app` в Dockerfile +- [x] `host not found in upstream "backend"` в nginx — nginx резолвил хост при старте, до поднятия backend → исправлено: Docker DNS resolver + `set $backend` +- [x] `http://localhost/api/docs` → 404 — FastAPI отдавал docs по `/docs`, а не `/api/docs` → исправлено: явные `docs_url`, `redoc_url`, `openapi_url` в FastAPI + --- ## Спринт 2 — Прохождение теста diff --git a/DOC/ШАГИ/ШАГ_2026-03-21_006.md b/DOC/ШАГИ/ШАГ_2026-03-21_006.md index b94a64a..3f2e58c 100644 --- a/DOC/ШАГИ/ШАГ_2026-03-21_006.md +++ b/DOC/ШАГИ/ШАГ_2026-03-21_006.md @@ -14,6 +14,7 @@ ## Ответ Реализован Спринт 1 в полном объёме: инфраструктура + создание тестов без авторизации. +Спринт протестирован вручную в браузере, найдены и исправлены 4 бага. --- @@ -113,6 +114,20 @@ docker compose up --build - Перейти к созданному тесту и увидеть все вопросы и ответы - `http://localhost/api/health` → `{"status": "ok"}` - `http://localhost/api/docs` → Swagger UI FastAPI +- `http://localhost/api/redoc` → ReDoc документация + +--- + +## Баги, найденные и исправленные при ручном тестировании + +| # | Симптом | Причина | Исправление | +|---|---------|---------|-------------| +| 1 | `permission denied` на `entrypoint.sh` | `docker-compose.yml` монтирует `./backend:/app` — volume перекрывает файлы образа, включая результат `chmod +x` из Dockerfile | `CMD ["bash", "entrypoint.sh"]` вместо `CMD ["./entrypoint.sh"]` | +| 2 | `No module named 'app'` в Alembic | Python не добавляет WORKDIR в `sys.path` автоматически | `ENV PYTHONPATH=/app` в Dockerfile | +| 3 | nginx: `host not found in upstream "backend"` | nginx резолвит upstream-хосты **при старте**, а backend ещё не поднялся | Docker DNS resolver `127.0.0.11` + `set $backend` — резолвинг откладывается до момента запроса | +| 4 | `http://localhost/api/docs` → 404 | FastAPI по умолчанию отдаёт Swagger по `/docs`, а через nginx путь становится `/api/docs` → `backend:8000/api/docs` (не существует) | Явно указать `docs_url="/api/docs"`, `redoc_url="/api/redoc"`, `openapi_url="/api/openapi.json"` в FastAPI | + +> **Для джуниора:** все четыре бага — типичные для первого запуска Docker + FastAPI + nginx. Запомни их, встретишь снова. ---