Спринт 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:
@@ -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
|
||||
Reference in New Issue
Block a user