# Шаг 5: Управление тестами (админка) ## Цель Реализовать создание и редактирование тестов с вопросами и версионированием. --- ## Задачи ### 5.1. CRUD тестов | Эндпоинт | Метод | Описание | |----------|-------|----------| | `/api/tests` | GET | Список тестов | | `/api/tests` | POST | Создать тест | | `/api/tests/:id` | GET | Тест с вопросами | | `/api/tests/:id` | PUT | Редактировать | | `/api/tests/:id` | DELETE | Деактивировать | ### 5.2. Управление вопросами - Добавление/редактирование вопросов к версии теста - Минимум 3 варианта ответа на вопрос - Указание одного или нескольких правильных ответов - Перетаскивание для изменения порядка (drag & drop) ### 5.3. Версионирование - При создании теста — версия 1, помечается как активная - При редактировании: - Если никто не проходил — изменяется текущая версия - Если уже были попытки — создаётся новая версия (version + 1) - Переключение активной версии вручную - Просмотр истории версий ### 5.4. Настройки теста - `passing_threshold` — порог зачёта (%) - `time_limit` — таймер в минутах (опционально) - `allow_back` — разрешить возврат к предыдущему вопросу ### 5.5. Права доступа - **HR, Manager:** могут создавать и редактировать тесты - **Employee:** только прохождение --- *Фактические маршруты API в `TestingWebApp`: префикс `/api/tests`, версии и черновик — см. [../PROJECT_STATUS.md](../PROJECT_STATUS.md).* ### 5.6. UI кабинета (React, `TestDetail`) - Редактор теста: **`frontend/src/pages/TestDetail.jsx`**, стили **`frontend/src/styles/cabinet-theme.css`**: аккордеоны **«О тесте»**, **«Вопросы»** (в т.ч. **«Документ в вопросы»**), **«История»** (внутри: **Версии** + **Прохождения**), **«Показ в каталоге»** (**Видимость**; при `assignmentUi` — **Кому выдать**), фикс-футер **«Сохранить / К списку»** на моб. ширинах. - Сводка мобильного UI и чек-лист: [../СПРИНТЫ_МОБИЛЬНЫЙ_ДИЗАЙН.md](../СПРИНТЫ_МОБИЛЬНЫЙ_ДИЗАЙН.md). ## Результат - Полноценный конструктор тестов - Версионирование с сохранением истории - Управление вопросами и ответами --- *Актуальная привязка к коду: [../PROJECT_STATUS.md](../PROJECT_STATUS.md) · индекс шагов: [README.md](README.md).*