73 lines
2.6 KiB
Markdown
73 lines
2.6 KiB
Markdown
# Шаг 7: Интерфейс прохождения теста
|
|
|
|
## Цель
|
|
|
|
Реализовать интерфейс для сотрудника, позволяющий проходить назначенные тесты.
|
|
|
|
---
|
|
|
|
## Задачи
|
|
|
|
### 7.1. Начало прохождения
|
|
|
|
| Эндпоинт | Метод | Описание |
|
|
|----------|-------|----------|
|
|
| `/api/attempts/start` | POST | Начать попытку |
|
|
| `/api/attempts/:id` | GET | Получить вопросы |
|
|
|
|
**Логика:**
|
|
- Проверить лимит попыток
|
|
- Создать запись попытки со статусом `in_progress`
|
|
- Перемешать вопросы в случайном порядке
|
|
- Запустить таймер (если задан)
|
|
|
|
### 7.2. Ответ на вопрос
|
|
|
|
| Эндпоинт | Метод | Описание |
|
|
|----------|-------|----------|
|
|
| `/api/attempts/:id/answers` | POST | Отправить ответ |
|
|
| `/api/attempts/:id/answers` | GET | Получить текущий прогресс |
|
|
|
|
**Параметры:**
|
|
- `question_id` — ID вопроса
|
|
- `selected_options` — массив ID выбранных вариантов
|
|
|
|
### 7.3. Навигация
|
|
|
|
- Переход к следующему вопросу
|
|
- Возврат к предыдущему (если `allow_back = true`)
|
|
- Переход к конкретному вопросу по номеру
|
|
|
|
### 7.4. Завершение теста
|
|
|
|
| Эндпоинт | Метод | Описание |
|
|
|----------|-------|----------|
|
|
| `/api/attempts/:id/complete` | POST | Завершить тест |
|
|
|
|
**Логика:**
|
|
- Проверить ответы на все вопросы
|
|
- Подсчитать правильные ответы
|
|
- Вычислить процент
|
|
- Сравнить с порогом зачёта
|
|
- Обновить статус попытки на `completed`
|
|
|
|
### 7.5. Таймер
|
|
|
|
- Обратный отсчёт на фронтенде
|
|
- При истечении — автоматическое завершение
|
|
- Проверка на бэкенде при отправке ответа
|
|
|
|
### 7.6. Обработка просрочки
|
|
|
|
- При запросе списка назначений проверить дедлайн
|
|
- Если дедлайн прошёл и попытка не завершена — пометить как `expired`
|
|
|
|
---
|
|
|
|
## Результат
|
|
|
|
- Прохождение теста со случайным порядком вопросов
|
|
- Таймер с автозавершением
|
|
- Сохранение прогресса
|
|
- Навигация по вопросам
|