From e0e94f4439abd897851afc184e2477cd51487e76 Mon Sep 17 00:00:00 2001 From: Kirill Date: Sun, 24 May 2026 16:03:37 +0500 Subject: [PATCH] docs: add admin test checklist design spec --- .../2026-05-24-admin-test-checklist-design.md | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 docs/superpowers/specs/2026-05-24-admin-test-checklist-design.md diff --git a/docs/superpowers/specs/2026-05-24-admin-test-checklist-design.md b/docs/superpowers/specs/2026-05-24-admin-test-checklist-design.md new file mode 100644 index 0000000..30093d1 --- /dev/null +++ b/docs/superpowers/specs/2026-05-24-admin-test-checklist-design.md @@ -0,0 +1,147 @@ +# Design: Admin Test Checklist + +**Date:** 2026-05-24 +**Status:** Approved + +## Summary + +Админ-страница с чек-листом для ручного тестирования функционала сайта. Каждая проверка имеет описание действия и ожидаемый результат. Отметка сохраняется в SQLite с автоматической датой. + +## Architecture + +### Data Model + +Новая модель `ChecklistResult` в Prisma schema: + +```prisma +model ChecklistResult { + id String @id @default(cuid()) + itemKey String @unique // уникальный ключ проверки + passed Boolean + checkedAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} +``` + +### Elements Source + +Элементы чек-листа — хардкод в `shared/constants/test-checklist-items.ts` (JS + .d.ts). Версионируются с кодом. + +Структура элемента: +```ts +{ + key: string // уникальный идентификатор + section: string // раздел (группировка) + action: string // что сделать + expectedResult: string // что должно произойти +} +``` + +### API + +**Server route:** `server/src/routes/api/admin/test-checklist.js` + +- `GET /api/admin/test-checklist` — возвращает все элементы + их результаты из БД +- `PATCH /api/admin/test-checklist` — body: `{ itemKey, passed }`, обновляет/создаёт результат, `checkedAt = now()` +- `POST /api/admin/test-checklist/reset` — сбрасывает все результаты (удаляет записи) + +Только для админов. + +### Frontend + +**Page:** `client/src/pages/admin-test-checklist/ui/AdminTestChecklistPage.tsx` + +- Аккордеон по разделам (MUI Accordion) +- Каждая строка: чекбокс, колонка "Действие", колонка "Ожидаемый результат", дата проверки +- Чекбокс отмечен = `passed: true`, снят = `passed: false` +- Дата проставляется автоматически при изменении чекбокса +- Кнопка «Сбросить все» для полного ре-теста +- `@tanstack/react-query` для данных, `apiClient` для запросов + +**Navigation:** новый пункт в `AdminLayoutPage` — «Тест-чеклист» с иконкой `ClipboardCheck`, роут `/admin/test-checklist` + +## Sections & Items + +### Авторизация (auth) +- `auth.register-email` — Регистрация по email → код приходит, аккаунт создаётся +- `auth.login-password` — Вход по паролю → корректный пускает, неправильный — ошибка +- `auth.oauth-vk` — OAuth VK → редирект, callback, авторизация +- `auth.oauth-yandex` — OAuth Yandex → редирект, callback, авторизация +- `auth.reset-password` — Сброс пароля → письмо приходит, ссылка работает +- `auth.logout` — Выход → сессия очищается + +### Каталог и товары (catalog) +- `catalog.homepage` — Главная → слайдер грузится, товары отображаются +- `catalog.filters` — Фильтры → по категории, цене, материалам работают +- `catalog.product-page` — Страница товара → фото, описание, цена, кнопка "В корзину" +- `catalog.seo` — SEO → title, meta, slug корректные + +### Корзина (cart) +- `cart.add` — Добавление товара → счётчик обновляется +- `cart.change-qty` — Изменение количества → пересчёт суммы +- `cart.remove` — Удаление → товар убирается, сумма пересчитывается + +### Чекаут (checkout) +- `checkout.address` — Выбор адреса → из сохранённых / новый +- `checkout.delivery` — Выбор доставки → Почта, OZON, Яндекс, 5post +- `checkout.payment` — Выбор оплаты → онлайн / при получении +- `checkout.comment` — Комментарий к заказу → поле работает +- `checkout.create` — Создание заказа → заказ создаётся, статус DRAFT + +### Оплата (payment) +- `payment.yookassa` — ЮKassa → редирект на оплату, webhook обрабатывается +- `payment.status` — Статус платежа → обновляется после webhook + +### Профиль пользователя (profile) +- `profile.avatar` — Аватар → загрузка, отображение, удаление +- `profile.settings` — Настройки → email, имя, способы входа +- `profile.addresses` — Адреса → добавление, редактирование, удаление, по умолчанию +- `profile.orders` — Заказы → список, детали, статусы +- `profile.messages` — Сообщения по заказу → отправка, получение, read state +- `profile.notifications` — Уведомления → вкл/выкл каналы +- `profile.delete-account` — Удаление аккаунта → данные удаляются + +### Админ — Товары (admin-products) +- `admin-products.list` — Список → пагинация, поиск +- `admin-products.create` — Создание → все поля, загрузка фото, публикация +- `admin-products.edit` — Редактирование → изменения сохраняются +- `admin-products.delete` — Удаление → товар удаляется +- `admin-products.images` — Изображения → добавление, сортировка, удаление + +### Админ — Категории (admin-categories) +- `admin-categories.crud` — CRUD категорий, сортировка + +### Админ — Заказы (admin-orders) +- `admin-orders.list` — Список → фильтрация по статусу, внимание +- `admin-orders.details` — Детали → состав, статус, смена статуса +- `admin-orders.messages` — Сообщения → ответ пользователю + +### Админ — Отзывы (admin-reviews) +- `admin-reviews.list` — Список → pending/approved/rejected +- `admin-reviews.moderate` — Модерация → approve/reject + +### Админ — Пользователи (admin-users) +- `admin-users.list` — Список → email, дата регистрации +- `admin-users.orders` — Просмотр заказов пользователя + +### Админ — Галерея (admin-gallery) +- `admin-gallery.upload` — Загрузка, удаление, использование в слайдере + +### Админ — Настройки (admin-settings) +- `admin-settings.notifications` — Уведомления → email, telegram + +### Инфо-страницы (info) +- `info.pages` — Доставка, оплата, как заказать, статусы заказов +- `info.legal` — Политика конфиденциальности, условия использования + +### SSE / Realtime (sse) +- `sse.notifications` — Уведомления приходят в реальном времени + +## Implementation Plan + +1. Prisma migration — добавить модель `ChecklistResult` +2. Shared constants — `test-checklist-items.ts` +3. Server API route — GET/PATCH/POST +4. Client page — `AdminTestChecklistPage` +5. Client routing — добавить в `AdminLayoutPage` +6. Register route in `client/src/app/routes/index.tsx`