From 98049244ae0685727333cf28347a048de6e9d74b Mon Sep 17 00:00:00 2001 From: Aleksey Razorvin <> Date: Sat, 21 Mar 2026 13:18:18 +0500 Subject: [PATCH] docs: document Sprint 2 UX improvements Co-Authored-By: Claude Sonnet 4.6 --- DOC/СПРИНТЫ.md | 6 +++ DOC/ШАГИ/ШАГ_2026-03-21_009.md | 73 +++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 DOC/ШАГИ/ШАГ_2026-03-21_009.md diff --git a/DOC/СПРИНТЫ.md b/DOC/СПРИНТЫ.md index 70b90a2..3a4b089 100644 --- a/DOC/СПРИНТЫ.md +++ b/DOC/СПРИНТЫ.md @@ -63,6 +63,12 @@ - Разбор ошибок: вопрос, ответ сотрудника, правильный ответ - [x] Фронт: кнопка «Пройти тест» прямо в строке таблицы списка тестов +### Доработки после тестирования +- [x] Страница теста разделена на два вида: + - `/tests/:id` — вид сотрудника: вопросы и варианты ответов без отметок правильных + - `/tests/:id/edit` — вид автора: правильные ответы отмечены, жёлтый баннер, кнопка «Редактировать» (задизаблена до Спринта 4) +- [x] Список тестов: три кнопки действий заменены на выпадающее меню «⋯» — колонка с названием стала полноширинной + ### Баги, найденные и исправленные при тестировании - [x] «Не удалось загрузить тест» × 2 при нажатии «Пройти тест» — миграция `002_attempts` не применилась, т.к. `--reload` перезапускает только код приложения, но не `entrypoint.sh` → исправлено: `docker compose restart backend` diff --git a/DOC/ШАГИ/ШАГ_2026-03-21_009.md b/DOC/ШАГИ/ШАГ_2026-03-21_009.md new file mode 100644 index 0000000..72ec96d --- /dev/null +++ b/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