В marketplace отзыв может относиться к товару, конкретному продавцу, заказу или самой площадке. Если витрина фильтрует только по product_id, отзывы одинакового товара от разных продавцов смешиваются и искажают рейтинг.

Сначала определите бизнес-объект отзыва и его неизменяемые связи. Затем исправьте выборку, агрегаты и кеш так, чтобы seller/tenant входил в область данных. Исторические записи пересчитывают только после отчета о неоднозначных привязках.

Что проверить в первую очередь

Сначала зафиксируйте точный сценарий, время ошибки и последнее известное рабочее состояние. Не меняйте несколько настроек одновременно: один контролируемый шаг должен подтверждать или исключать одну гипотезу. Перед работой с данными и конфигурацией подготовьте резервную копию и понятный способ отката.

  • Проверьте поля review: product_id, offer_id, seller_id, order_item_id и tenant_id.
  • Сравните запрос витрины и административного списка.
  • Проверьте ключ кеша и материализованный рейтинг продавца.
  • Найдите отзывы, у которых seller определяется через текущее предложение, а не заказ.

Почему возникает проблема

Внешний симптом обычно появляется на границе нескольких компонентов: интерфейса, backend, базы, фоновой очереди или внешнего сервиса. Поэтому важно найти первое место, где состояние становится неверным, а не исправлять последнее сообщение об ошибке.

  • Выборка фильтрует product_id, но не seller_id/offer_id.
  • После смены продавца у предложения старый отзыв начинает отображаться у нового.
  • Кеш страницы или списка не включает seller id.
  • Агрегат рейтинга строится общей группировкой по товару.
  • Импорт отзывов сопоставляет продавца по SKU, не уникальному в marketplace.

Пошаговая диагностика

Диагностику проводите на тестовой записи или отдельном окружении. В журналах скрывайте токены, пароли и персональные данные. Для каждого шага сохраняйте измеримый результат: идентификатор события, код ответа, версию записи, состояние процесса или контрольную сумму.

  • Создайте одинаковый товар у двух тестовых продавцов и отдельные заказы/отзывы.
  • Просмотрите SQL/ORM и фактический cache key для обеих витрин.
  • Сравните источник seller_id в момент создания отзыва и при чтении.
  • Пересчитайте рейтинг на ограниченной выборке напрямую из order_item.
  • Проверьте API, SSR, мобильное приложение и поисковый индекс.

К чему привязывать отзыв в marketplace

Отзывы о товаре и отзывы о продавце решают разные задачи. Их можно показывать рядом, но хранить и агрегировать нужно раздельно.

  • Product review описывает свойства товара независимо от продавца.
  • Seller review оценивает исполнение заказа конкретным продавцом.
  • Order item связывает исторический отзыв с offer и seller на момент покупки.
  • Marketplace review относится к сервису площадки и не входит в рейтинг продавца.
  • Перенос или объединение продавцов требует явной миграции, а не динамической подстановки.

Как исправить проблему

Исправление лучше разбить на небольшие обратимые изменения. Сначала устраните подтвержденную причину, затем повторите исходный сценарий и проверьте соседние функции. Массовую обработку данных запускайте на ограниченной выборке с отчетом и только после сверки расширяйте на весь объем.

  • Зафиксируйте seller_id и offer_id из order_item при создании отзыва.
  • Добавьте tenant/seller scope во все запросы и policy чтения.
  • Исправьте cache key и инвалидацию после нового/измененного отзыва.
  • Перестройте агрегаты рейтинга по корректной размерности.
  • Исторические записи разделите на однозначные, восстанавливаемые и требующие ручной проверки.

Безопасный порядок внедрения

  • Сохраните затрагиваемые данные, конфигурацию и текущие журналы, заранее проверив способ отката.
  • Повторите проблему на тестовом объекте без реальных списаний, рассылок и изменений клиентских данных.
  • Внесите одно логическое изменение и зафиксируйте его в системе контроля версий или журнале работ.
  • Не отключайте авторизацию, валидацию, шифрование и другие защитные механизмы ради быстрого исчезновения ошибки.
  • После выкладки контролируйте логи, метрики и полный пользовательский сценарий, а не только один успешный запрос.

Как проверить результат

Разовый успешный тест недостаточен. Повторите операцию, проверьте крайние значения, параллельные действия и восстановление после перезапуска или временного сбоя. Для важного сценария сохраните автоматический тест либо короткий регрессионный чек-лист.

  • Отзывы продавца A не появляются у B при одинаковом товаре.
  • Смена текущего offer не перепривязывает исторический отзыв.
  • Список, счетчик и средний рейтинг используют один набор данных.
  • После очистки и прогрева кеша результат остается правильным.

Типичные ошибки при исправлении

  • Добавить seller filter только в одной странице, забыв API и агрегаты.
  • Определять продавца по текущему SKU без истории заказа.
  • Массово присваивать неоднозначные отзывы одному продавцу.
  • Кешировать карточку товара без учета tenant и языка/региона.

Как предотвратить повторение

Профилактика строится вокруг явных контрактов, повторяемых релизов и наблюдаемости. Система должна не только работать сейчас, но и позволять быстро увидеть нарушение инварианта при следующем обновлении, росте нагрузки или сбое внешнего сервиса.

  • Документируйте типы отзывов и источники связей.
  • Добавьте tenant-тесты с одинаковыми product/SKU у разных продавцов.
  • Контролируйте расхождение списка отзывов и агрегата рейтинга.
  • Проверяйте cache keys при каждом добавлении новой размерности.

Что подготовить для технического разбора

  • Описание ожидаемого и фактического поведения, а также точную последовательность действий.
  • Время проблемы, идентификатор тестового объекта и версии затронутых компонентов.
  • Фрагменты журналов до и после ошибки без секретов и персональных данных.
  • Перечень последних изменений и уже выполненных проверок.
  • Безопасный доступ к тестовой среде или способ воспроизвести сбой без влияния на клиентов.

Частые вопросы

Можно ли показывать общие отзывы товара у всех продавцов?

Да, если явно обозначить их как отзывы о товаре. Они не должны автоматически влиять на рейтинг конкретного продавца.

Что делать со старыми отзывами без seller_id?

Восстанавливать по order_item или исторической связи. Неоднозначные записи лучше отделить, а не угадывать продавца.

Когда нужна помощь специалиста

Если витрины marketplace смешивают отзывы или рейтинги, я могу проверить модель связей, запросы, кеш и агрегаты, безопасно исправить историю и добавить tenant-тесты.