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

FAQ — частые вопросы

Ответы на типичные вопросы администраторов и разработчиков DM Shop. Если нужного вопроса здесь нет — загляните в обзор или в технические разделы.

Общее

Как войти в админ-панель?

Откройте /signin на витрине, войдите учётной записью с ролью EDITOR, MANAGER, ADMIN или SUPER_ADMIN, затем перейдите на /admin. Набор разделов зависит от роли.

Какие есть роли и чем они отличаются?

Пять ролей: USER (покупатель), EDITOR (контент), MANAGER (контент + продажи), ADMIN (всё, кроме управления лицензией), SUPER_ADMIN (всё). Подробности — в разделе Безопасность.

Я ничего не вижу в админке / получаю 403

Скорее всего у учётной записи недостаточная роль. Доступ проверяется на бэкенде (Spring Security), а не только в интерфейсе. Попросите администратора повысить роль в разделе Пользователи.


Каталог и синхронизация

Откуда берутся товары и почему их нельзя создать вручную?

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

Как часто обновляется каталог?

Синхронизация mphone запускается по cron 0 */5 * * * * — каждые 5 минут. XML-пайплайн (атрибуты и картинки) — тоже каждые 5 минут. Это не 30 секунд.

Данные из mphone выглядят устаревшими — что делать?

В разделе Настройки → Синхронизация нажмите «Сбросить» у нужного потока (категории/бренды/товары) — следующий прогон загрузит данные с нуля. Кнопка «Запустить» запускает синхронизацию немедленно.

Можно ли отключить автоматические задачи?

Да. Каждая фоновая задача управляется флагом в таблице app_config: job_sync_enabled, xml_feed_pipeline_enabled, job_category_visibility_enabled, job_gbstore_mapping_enabled. По умолчанию все включены.

Как задать цену, отличную от mphone?

В карточке товара укажите «Цену сайта» (site_price) — она перекрывает цену из mphone на витрине. Полезно для акций.

Почему категория пропала из меню?

Фоновая задача авто-скрытия прячет категории без активных товаров (помечает auto_hidden_by_visibility_sync). Включить категорию обратно можно вручную в разделе Категории.

Как изменить порядок категорий?

Перетаскиванием (drag-and-drop) в дереве категорий. При большом числе видимых строк (>400) DnD отключается — используйте кнопки «вверх/вниз».


Изображения

Почему у товара нет картинки и как её добавить?

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

Картинки спарсились неправильно — как заменить?

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

Как обновить фото, не теряя привязки к товарам?

В медиатеке используйте «Заменить» — ID изображения сохраняется, все ссылки на него остаются. Не удаляйте и не загружайте заново.

Какой максимальный размер файла?

10 МБ. Поддерживаются JPG, PNG, WebP, GIF.


Заказы

Какие статусы у заказа?

NEW → PROCESSING → SENT → COMPLETED, а также ERROR, CANCELLED, ARCHIVED. Статус ERROR не финальный — заказ можно передать в mphone повторно.

Заказ завис в статусе «Ошибка» — что делать?

Откройте заказ и нажмите «Передать в mphone» ещё раз. Частая причина — недоступность mphone API в момент отправки.

Меняются ли суммы старых заказов при изменении каталога?

Нет. Каждая позиция хранит снимок названия и цену на момент заказа (price_at_order), поэтому сумма не меняется.

Как учитывается доставка?

Стоимость доставки задаётся менеджером в карточке заказа (delivery_cost) и прибавляется к сумме. В карточке есть справочник тарифов по зонам.

Как удалить старые заказы массово?

В списке заказов есть блок очистки: предпросмотр покажет, сколько заказов старше N дней будет удалено, после чего их можно удалить одной операцией (только ADMIN/SUPER_ADMIN).


XML-фид и атрибуты

Чем отличается синхронизация mphone от XML-пайплайна?

mphone даёт сам каталог (товары, цены, остатки). XML-фид (Яндекс.Маркет YML) даёт атрибуты и ссылки на изображения. XML обрабатывается многоэтапным пайплайном.

Я добавил правило атрибутов, но ничего не изменилось

Запустите синк с галочкой «Сбросить кеш хеша» — иначе фид считается неизменным (по SHA-256) и пропускается. См. Правила атрибутов.

Где посмотреть, что именно пришло в фиде?

В XML Пайплайн → Снепшоты: для каждого оффера видны параметры и фрагмент исходного XML.


Разработка

Как поднять проект локально?

docker-compose up -d (PostgreSQL, SeaweedFS, mock-api), затем ./gradlew bootRun в back/ и npm run dev в front/. Подробно — в Быстром старте.

Какой порт у чего?

Фронтенд 3000, бэкенд 8080, PostgreSQL 45432, SeaweedFS S3 8333, mock-api 8010.

Где Swagger?

http://localhost:8080/swagger-ui.html. Эндпоинты /swagger-ui/** и /v3/api-docs/** открыты без авторизации.

Как добавить миграцию БД?

Создайте новый changeset в back/src/main/resources/db/changelog/changes/ и зарегистрируйте его в db.changelog-master.xml. Никогда не меняйте уже применённые changeset'ы. Hibernate работает в режиме validate.

Почему падают тесты?

Интеграционные тесты используют Testcontainers — нужен запущенный Docker. Также для JWT задайте корректный JWT_SECRET (валидный base64). См. заметку о тестах в репозитории.