# ШАГ 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