В 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-тесты.