Приложение для тестирования сотрудников клиники методом один вопрос - до пяти ответов один из которых правильный. Сотрудник должен выбрать правильный вариант ответа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

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 — миграции 001005
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