fc684e7c7d
- Миграция 005: user_id в test_attempts (дефолт 1 = Гость) - GET /api/attempts с фильтрами по тесту, дате и пагинацией - Страница /tracker: таблица попыток, фильтры, пагинация - Ссылка «Трекер» в шапке приложения Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6.7 KiB
6.7 KiB
Итоги разработки — 21 марта 2026
Общая информация
| Параметр | Значение |
|---|---|
| Дата | 21 марта 2026 |
| Начало работы | 10:56 |
| Текущее состояние | Спринты 1–5 завершены |
| Затрачено времени | ~5 часов |
| Коммитов | 26 |
Хронология по коммитам
| Время | Этап |
|---|---|
| 10:56–11:41 | Подготовка: структура проекта, ТЗ v1.1, стек, план спринтов, README |
| 12:05–12:46 | Спринт 1 — инфраструктура + создание тестов |
| 12:53–13:18 | Спринт 2 — прохождение теста + результаты + UX |
| 13:22–14:08 | Спринт 3 — редактирование + версионирование |
| 14:08–15:11 | Спринт 4 — AI-помощник (DeepSeek) |
| 15:11–16:00 | Спринт 5 — трекер результатов |
Что реализовано
Спринт 1 — Инфраструктура + создание тестов (~40 мин)
- Docker Compose: PostgreSQL 16, FastAPI, React + Vite, Nginx
- Alembic: миграция
001_init(таблицы tests, questions, answers) - API:
POST /api/tests,GET /api/tests,GET /api/tests/{id} - Фронт: создание теста, список тестов, просмотр теста
- Исправлено 4 бага при тестировании (entrypoint, PYTHONPATH, nginx DNS, FastAPI docs URL)
Спринт 2 — Прохождение теста + результаты (~25 мин)
- Миграция
002_attempts(таблицы test_attempts, attempt_answers) - API:
POST /api/attempts,POST /api/attempts/{id}/submit,GET /api/attempts/{id}/result - Прохождение: случайный порядок вопросов, таймер с автосабмитом, навигация назад
- Страница результатов: балл, зачёт/незачёт, разбор ошибок по каждому вопросу
- UX: разделение вида сотрудника (
/tests/:id) и автора (/tests/:id/edit), выпадающее меню «⋯» в списке тестов
Спринт 3 — Редактирование + версионирование (~46 мин)
- Миграция
003_test_versioning(полеparent_idв tests) - API:
PUT /api/tests/{id},GET /api/tests/{id}/versions,POST /api/tests/{id}/activate - Логика: нет попыток → редактировать на месте; есть попытки → создать новую версию (
version+1,parent_id=old.id) - Фронт: общий компонент
TestForm, страница редактирования с историей версий и активацией - Исправлено 2 бага (FK cascade при bulk DELETE, отображение статуса «Активная»)
Спринт 4 — AI-помощник (DeepSeek) (~63 мин)
- Миграция
004_settings(таблица settings, key-value) - Страница
/settings: ввод API ключа DeepSeek + кнопка «Проверить подключение» - 6 AI-эндпоинтов:
POST /api/llm/check— проверка подключенияPOST /api/llm/generate— генерация вопросов по теме (= название теста)POST /api/llm/improve— улучшение формулировки вопроса + ответовPOST /api/llm/distractors— генерация дистракторовPOST /api/llm/review— рецензия всего тестаPOST /api/llm/improve_all— улучшение всего теста целиком
- В форме теста: 4 AI-кнопки с модалами и постатейным сравнением (галочки для применения изменений)
- Шапка приложения с навигацией
Спринт 5 — Трекер результатов (~49 мин)
- Миграция
005_attempt_user(полеuser_idв test_attempts, дефолт 1 = «Гость») - API:
GET /api/attemptsс фильтрами (test_id, date_from, date_to) и пагинацией - Страница
/tracker: таблица всех попыток, фильтр по тесту и диапазону дат, пагинация - Колонки: Сотрудник / Тест + версия / Начало / Завершение / Результат / Зачёт
Объём кода
| Слой | Файлы |
|---|---|
| Backend — модели | test.py, attempt.py, setting.py |
| Backend — схемы | test.py, attempt.py, setting.py |
| Backend — API роутеры | tests.py, attempts.py, llm.py, settings.py |
| Backend — сервисы | llm.py |
| Backend — миграции | 001 → 005 |
| Frontend — страницы | TestList, TestCreate, TestDetail, TestEdit, TestTake, AttemptResult, Settings, Tracker |
| Frontend — компоненты | TestForm (с AI-функциями) |
| Frontend — API клиенты | tests.ts, attempts.ts, llm.ts, settings.ts, client.ts |
| Документация | ТЗ v1.2, СТЕК, СПРИНТЫ, README, 12 файлов ШАГИ |
| Итого | ~46 файлов |
Текущий статус спринтов
| Спринт | Содержание | Статус |
|---|---|---|
| 1 | Инфраструктура + создание тестов | ✅ Завершён |
| 2 | Прохождение теста + результаты | ✅ Завершён |
| 3 | Редактирование + версионирование | ✅ Завершён |
| 4 | AI-помощник (DeepSeek) | ✅ Завершён |
| 5 | Трекер результатов | ✅ Завершён |
| 6 | Авторизация, роли, подразделения | ⬜ Следующий |
| 7 | Уведомления в MAX | ⬜ Запланирован |
Технический долг перед Спринтом 6
user_id = 1(Гость) вtest_attempts— заменить на ID авторизованного пользователяGUEST_USER_NAME = "Гость"вapi/attempts.py— заменить на JOIN с таблицейusers- Все эндпоинты открыты без авторизации — добавить JWT Middleware
Запуск проекта
docker compose up --build
Приложение: http://localhost
API документация: http://localhost/api/docs