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