Приложение для тестирования сотрудников клиники методом один вопрос - до пяти ответов один из которых правильный. Сотрудник должен выбрать правильный вариант ответа
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.
Итоги разработки — 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