architect/templates/arh/ideal-shop/requirements/1-ENGINE.md

ДВИЖОК (Engine) — Ядро магазина

Версия: 1.0.0
Дата: 2025-12-06


Принцип

Движок = минимальное ядро, которое нельзя отключить.
Всё остальное — модули или внешние сервисы.


1. КАТАЛОГ

Функции

Функция Описание Best Practice
Категории 2 уровня (категория → подкатегория) Плоская структура, max 2 уровня для UX
Товары CRUD, статусы, сортировка Черновик → Активен → Архив
Атрибуты Характеристики товаров Типизированные (число, строка, список)
Варианты Размер, цвет, комплектация SKU на каждый вариант
Цены Базовая, скидка, старая Отдельная сущность для мультивалюты
Остатки Количество на складе Резервирование при заказе
Медиа Фото, видео Отдельное хранилище (S3/CDN)

Лучшие практики

Структура данных

Category
├── id, slug, name, parent_id
├── image, description
├── position, status
└── seo (title, description)

Product
├── id, slug, name, category_id
├── price, old_price, cost
├── stock, sku, status
├── description, short_description
├── attributes[], variants[]
├── images[], videos[]
└── seo (title, description, keywords)

2. КОРЗИНА

Функции

Функция Описание Best Practice
Добавление Товар + количество Проверка остатков
Изменение +/- количество Min 1, max = остаток
Удаление Убрать товар Confirm не нужен
Сохранение Персистентность Cookie + DB (для авторизованных)
Слияние При авторизации Объединить гостевую + сохранённую
Пересчёт Итого, скидки При каждом изменении

Лучшие практики

API

POST   /cart/add      {product_id, variant_id, qty}
PATCH  /cart/update   {item_id, qty}
DELETE /cart/remove   {item_id}
GET    /cart           {items[], total, discount}
POST   /cart/merge    (при авторизации)

3. ЗАКАЗ

Функции

Функция Описание Best Practice
Создание Из корзины Одна транзакция
Статусы Жизненный цикл Конечный автомат
История Лог изменений Кто, когда, что
Уведомления Email/SMS/Push При смене статуса
Отмена Возврат остатков Только до отправки

Статусы заказа

new → confirmed → paid → processing → shipped → delivered → completed
         ↓                    ↓
      cancelled           returned

Лучшие практики

Структура данных

Order
├── id, number, user_id (nullable)
├── status, created_at, updated_at
├── items[] {product, variant, price, qty}
├── shipping {method, address, cost, tracking}
├── payment {method, status, transaction_id}
├── totals {subtotal, shipping, discount, total}
├── customer {name, phone, email}
└── history[] {status, date, comment, user}

4. ПОЛЬЗОВАТЕЛИ

Функции

Функция Описание Best Practice
Регистрация Создание аккаунта Минимум полей (телефон/email)
Авторизация Вход в систему Множественные методы
Профиль Данные пользователя Редактирование
Адреса Сохранённые адреса Множественные
История Заказы, просмотры Полная история
Сессии Активные устройства Управление

Методы авторизации

Метод Реализация Приоритет
Телефон + SMS Код 4-6 цифр #1 (основной)
Телефон + звонок Последние 4 цифры #2 (резерв)
VK ID OAuth 2.0 #3
Яндекс ID OAuth 2.0 #4
Госуслуги (ЕСИА) OAuth 2.0 + сертификат #5 (доверие)
Google OAuth 2.0 #6
Email + пароль Classic #7 (legacy)

Лучшие практики

Структура данных

User
├── id, phone (unique), email
├── name, created_at
├── addresses[] {title, address, city, zip, default}
├── oauth_connections[] {provider, provider_id}
└── settings {notifications, language}

5. ПОИСК (базовый)

Функции

Функция Описание Best Practice
Полнотекстовый По названию, описанию PostgreSQL FTS / SQLite FTS5
Фильтрация По атрибутам, цене Индексы
Сортировка Цена, популярность, новизна Предустановленные

Лучшие практики

API

GET /search?q=...&category=...&price_min=...&sort=...
→ {products[], facets{}, total, page}

6. АДМИНКА

Функции

Раздел Описание
Dashboard Статистика, графики
Каталог Категории, товары
Заказы Список, детали, статусы
Клиенты Пользователи, история
Настройки Общие, доставка, оплата
Контент Страницы, баннеры

Лучшие практики


7. API

Принципы

Принцип Описание
REST Ресурсо-ориентированный
JSON Формат данных
Версионирование /api/v1/
Аутентификация JWT / API Key
Rate limiting Защита от перегрузки
CORS Для SPA фронта

Эндпоинты (основные)

# Каталог
GET    /api/v1/categories
GET    /api/v1/categories/:slug
GET    /api/v1/products
GET    /api/v1/products/:slug

# Корзина
GET    /api/v1/cart
POST   /api/v1/cart/items
PATCH  /api/v1/cart/items/:id
DELETE /api/v1/cart/items/:id

# Заказы
POST   /api/v1/orders
GET    /api/v1/orders
GET    /api/v1/orders/:id

# Пользователи
POST   /api/v1/auth/send-code
POST   /api/v1/auth/verify
GET    /api/v1/profile
PATCH  /api/v1/profile

8. SEO (базовый)

Функции

Функция Описание Best Practice
ЧПУ Человекопонятные URL /category/product
Meta title, description Шаблоны + ручное
Sitemap XML карта сайта Автогенерация
Robots.txt Индексация Настраиваемый
Canonical Основной URL Для дублей
Schema.org Микроразметка Product, BreadcrumbList

Лучшие практики


Резюме

Компонент Сложность Критичность
Каталог Высокая Критично
Корзина Средняя Критично
Заказ Высокая Критично
Пользователи Средняя Критично
Поиск (базовый) Низкая Важно
Админка Высокая Критично
API Средняя Критично
SEO Низкая Важно

Версия: 1.0.0