Перейти к основному содержимому

Каталог товаров

Источник данных

Товары, категории и бренды поступают из внешней системы mphone через автоматическую синхронизацию по расписанию (каждые 5 минут). Подробнее — в разделе Синхронизация с mphone.

Атрибуты и изображения товаров дополнительно загружаются из XML-фида поставщика — см. XML-пайплайн и Парсинг изображений.

Процесс синхронизации можно контролировать из Админ-панели: Настройки → Синхронизация → Запустить / Сбросить.

Структура каталога

Категория (с external_id из mphone)
└── Подкатегория
└── Товар (с атрибутами, изображениями, остатком)

Каждая категория может быть настроена:

  • enabled — показывается ли в навигации
  • show_in_homepage — отображается ли в блоке на главной странице
  • display_order / sort_order — порядок среди соседних категорий (управляется перетаскиванием)
  • category_locked_by_gbstore — категория зафиксирована маппингом из XML-фида и не перезаписывается синхронизацией mphone

Авто-скрытие категорий

Фоновая задача CategoryVisibilityJob (по умолчанию каждые 5 минут, флаг job_category_visibility_enabled) скрывает категории, в которых не осталось активных товаров, и помечает их auto_hidden_by_visibility_sync. То же действие доступно вручную: Категории → Действия → Скрыть неиспользуемые (с предпросмотром).

Управление товарами в Админ-панели

Список товаров

Страница /admin/products — таблица всех товаров с фильтрами:

  • По категории, бренду
  • По наличию / активности
  • Поиск по названию

Карточка товара

Страница /admin/products/{id}:

  • Просмотр данных синхронизированных из mphone
  • Цена сайта (site_price) — ручное переопределение цены. Если задана, используется вместо price на витрине
  • Привязка/отвязка изображений с заданием порядка отображения
  • Просмотр атрибутов товара (из mphone или добавленных вручную)

Изображения товара

Изображения загружаются через Медиатеку (/admin/media) и затем привязываются к товару:

  1. Загрузить файл: /admin/media → кнопка «Загрузить»
  2. Открыть карточку товара: /admin/products/{id}
  3. Привязать изображение: указать image_id и порядок отображения

Эндпоинт: POST /api/v1/products/{productId}/images/{imageId}?displayOrder=0

Автоматический парсинг изображений

Помимо ручной привязки, изображения могут подтягиваться автоматически: товар ставится в очередь скрейпинга, фоновая задача скачивает картинки со страницы товара у поставщика (GBStore) и сохраняет их в S3. Статус, лог попыток и ручной повтор доступны в карточке товара и в разделе Каталог → Очередь картинок. Подробнее — Парсинг изображений.

Ручные переопределения картинок (заменить или добавить к спарсенным) задаются в разделе XML Пайплайн → Переопределения картинок (режимы REPLACE / APPEND).

Управление категориями

Страница /admin/categories — дерево категорий с несколькими режимами просмотра:

  • Дерево («Все») — полная иерархия из БД
  • В меню — как категории рендерятся на витрине (осиротевшие при скрытом родителе поднимаются в корень)
  • Список — плоская таблица
  • Фильтры — regex-правила видимости категорий
  • Действия — массовое «скрыть неиспользуемые»

Возможности:

  • Включить/выключить категорию, управлять отображением на главной
  • Перетаскивание (drag-and-drop) для смены порядка среди соседей (отключается при >400 видимых строк ради производительности)
  • Кнопки «вверх/вниз» и пакетная переустановка порядка (POST /api/v1/categories/{id}/move, POST /api/v1/categories/reorder)
  • Загрузить иконку категории
  • Настройки дерева: category_tree_orphan_as_root, category_tree_root_category_id

Страница /admin/categories/{id} — настройки конкретной категории: видимость, иконка, причина скрытия.

Атрибуты товара

Атрибуты синхронизируются из mphone (source = EXTERNAL) и могут добавляться вручную (source = MANUAL).

Используются для:

  • Отображения характеристик в карточке товара
  • Категорийных фильтров (regex-правила в category_regex_filters)

Остатки

Поле stock на товаре обновляется при каждой синхронизации. История изменений остатков хранится в таблице stock.

Корзина валидируется через POST /api/v1/cart/validate — проверяет актуальные цены и наличие перед оформлением заказа.