Browse Source

docs: document Sprint 2 UX improvements

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
master
Aleksey Razorvin 1 week ago
parent
commit
98049244ae
  1. 6
      DOC/СПРИНТЫ.md
  2. 73
      DOC/ШАГИ/ШАГ_2026-03-21_009.md

6
DOC/СПРИНТЫ.md

@ -63,6 +63,12 @@
- Разбор ошибок: вопрос, ответ сотрудника, правильный ответ - Разбор ошибок: вопрос, ответ сотрудника, правильный ответ
- [x] Фронт: кнопка «Пройти тест» прямо в строке таблицы списка тестов - [x] Фронт: кнопка «Пройти тест» прямо в строке таблицы списка тестов
### Доработки после тестирования
- [x] Страница теста разделена на два вида:
- `/tests/:id` — вид сотрудника: вопросы и варианты ответов без отметок правильных
- `/tests/:id/edit` — вид автора: правильные ответы отмечены, жёлтый баннер, кнопка «Редактировать» (задизаблена до Спринта 4)
- [x] Список тестов: три кнопки действий заменены на выпадающее меню «⋯» — колонка с названием стала полноширинной
### Баги, найденные и исправленные при тестировании ### Баги, найденные и исправленные при тестировании
- [x] «Не удалось загрузить тест» × 2 при нажатии «Пройти тест» — миграция `002_attempts` не применилась, т.к. `--reload` перезапускает только код приложения, но не `entrypoint.sh` → исправлено: `docker compose restart backend` - [x] «Не удалось загрузить тест» × 2 при нажатии «Пройти тест» — миграция `002_attempts` не применилась, т.к. `--reload` перезапускает только код приложения, но не `entrypoint.sh` → исправлено: `docker compose restart backend`

73
DOC/ШАГИ/ШАГ_2026-03-21_009.md

@ -0,0 +1,73 @@
# ШАГ 009 — Спринт 2: Доработки UX после тестирования
**Дата:** 2026-03-21
**Контекст:** Мастер-класс по разработке системы тестирования сотрудников клиники.
---
## Запросы
> 1. На странице теста видны правильные ответы — зачем тогда проходить тест?
> 2. На главной колонка с названием теста стала слишком узкой из-за трёх кнопок действий.
---
## Изменения
### 1. Разделение страницы теста на два вида
**Проблема:** `/tests/:id` показывала зелёные галочки у правильных ответов. Пользователь мог подсмотреть ответы до прохождения теста.
**Решение:** два отдельных маршрута с разным содержимым.
| Маршрут | Для кого | Что показывает |
|---------|----------|----------------|
| `/tests/:id` | Сотрудник | Вопросы и варианты ответов без отметок |
| `/tests/:id/edit` | Автор | Все ответы с отметками ✓/✗ + жёлтый баннер «Вид автора» |
Кнопка «Редактировать» на странице автора пока задизаблена — активируется в Спринте 4 вместе с авторизацией.
**Затронутые файлы:**
```
frontend/src/pages/TestDetail/index.tsx ← убраны CheckCircleTwoTone / CloseCircleTwoTone
frontend/src/pages/TestEdit/index.tsx ← новый файл, бывший TestDetail + баннер
frontend/src/App.tsx ← добавлен маршрут /tests/:id/edit
```
---
### 2. Выпадающее меню «⋯» в списке тестов
**Проблема:** Три кнопки («Открыть», «Изменить», «Пройти тест») в одной ячейке сжимали колонку с названием теста.
**Решение:** Все три действия убраны в `Dropdown` по кнопке `MoreOutlined` (⋯). Колонка действий сужена до 60px, колонка с названием занимает всю оставшуюся ширину.
```
frontend/src/pages/TestList/index.tsx ← Space + 3 Button → Dropdown с menu.items
```
**Структура меню:**
```
Открыть
Изменить
─────────
Пройти тест
```
---
## Архитектурное решение для джуниора
> Разделение «вид сотрудника» / «вид автора» сделано через **два отдельных React-компонента** на разных маршрутах, а не через условный рендеринг внутри одного компонента.
>
> Почему: в Спринте 4 эти маршруты будут защищены разными ролями (`ProtectedRoute`). Если бы логика была в одном компоненте, пришлось бы прятать данные на фронте — это ненадёжно. Два маршрута = два разных запроса = чистое разграничение доступа.
---
## Следующие шаги
- [x] Спринт 1: Инфраструктура + Создание тестов
- [x] Спринт 2: Прохождение теста + результат
- [ ] Спринт 3: Трекер результатов
- [ ] Спринт 4: Авторизация и роли
- [ ] Спринт 5: Уведомления в MAX
Loading…
Cancel
Save