docs: add admin test checklist design spec
This commit is contained in:
@@ -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`
|
||||
Reference in New Issue
Block a user