Спринт 5: Трекер результатов

- Миграция 005: user_id в test_attempts (дефолт 1 = Гость)
- GET /api/attempts с фильтрами по тесту, дате и пагинацией
- Страница /tracker: таблица попыток, фильтры, пагинация
- Ссылка «Трекер» в шапке приложения

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Aleksey Razorvin
2026-03-21 15:26:40 +05:00
parent 9a0b3ba92c
commit fc684e7c7d
11 changed files with 522 additions and 22 deletions
+72
View File
@@ -0,0 +1,72 @@
# ШАГ 013 — Спринт 5: Трекер результатов
**Дата:** 2026-03-21
**Контекст:** Мастер-класс по разработке системы тестирования сотрудников клиники.
---
## Запрос
> Оставляем текущий спринт. Введём user_id здесь вручную — пусть это будет гость.
---
## Реализовано
Страница трекера всех попыток с фильтрацией и пагинацией. Все попытки пока принадлежат одному пользователю — «Гость» (user_id = 1).
---
## Новые файлы
```
backend/alembic/versions/005_attempt_user.py ← добавляет user_id в test_attempts
frontend/src/pages/Tracker/index.tsx ← страница /tracker
```
## Изменённые файлы
```
backend/app/models/attempt.py ← поле user_id (default=1, server_default='1')
backend/app/schemas/attempt.py ← AttemptListItem, AttemptListResponse
backend/app/api/attempts.py ← GET /api/attempts + GUEST_USER_ID/NAME константы
frontend/src/api/attempts.ts ← AttemptListItem, AttemptListResponse, list()
frontend/src/App.tsx ← роут /tracker, кнопка «Трекер» в шапке
```
---
## API эндпоинты (новые)
| Метод | URL | Параметры | Описание |
|-------|-----|-----------|----------|
| GET | `/api/attempts` | test_id, date_from, date_to, page, page_size | Список завершённых попыток |
---
## Схема БД (изменено)
```
test_attempts
+ user_id INTEGER NOT NULL DEFAULT 1
```
---
## Технический долг (Sprint 6)
- `user_id = 1` → заменить на ID из JWT токена
- `GUEST_USER_NAME` → JOIN с таблицей users
- Все эндпоинты открыты → добавить JWT Middleware
---
## Следующие шаги
- [x] Спринт 1: Инфраструктура + Создание тестов
- [x] Спринт 2: Прохождение теста + результат
- [x] Спринт 3: Редактирование + версионность
- [x] Спринт 4: AI-помощник (DeepSeek)
- [x] Спринт 5: Трекер результатов
- [ ] Спринт 6: Авторизация и роли
- [ ] Спринт 7: Уведомления в MAX