Sobes.tech
Senior
37

Proizvod je stigao sa zahtevom da se razvije servis za lojalnost, koji će na osnovu broja dostavljenih narudžbi (glavni sistem narudžbi OMS) davati servisu za pravljenje narudžbi (blagajna) veličinu popusta. Servis za lojalnost trenutno neće imati front-end, samo u bazi podataka treba sačuvati mapiranje od koje količine dostavljenih i neotkazanih narudžbi koja popust. Nešto poput: Narudžbe Popust [procenat]% [procenat]% [procenat]% [procenat]% Potrebno je dizajnirati servis, predložiti mehanizme integracije sa servisom za pravljenje narudžbi i servisom za upravljanje narudžbama. Potrebno je dizajnirati arhitekturu servisa, koju će moći da preda razvojni tim i implementira se.

Компаније где су питане
СБЕРСБЕР

Одговор од АИ

sobes.tech АИ

Для сервиса Лояльности, который на основе количества доставленных и не отменённых заказов выдаёт размер скидки, предлагаю следующую архитектуру и интеграционные механизмы:

Архитектура сервиса

  • Хранение данных: В базе данных хранится таблица с маппингом "минимальное количество заказов" → "размер скидки".
  • API: RESTful или gRPC сервис с методами:
    • Получить скидку по количеству заказов
    • Обновить правила скидок (администрирование)

Интеграция с OMS (сервис управления заказами)

  • OMS отправляет события о доставленных и не отменённых заказах (например, через очередь сообщений или webhook).
  • Сервис Лояльности подписывается на эти события и обновляет внутренний счётчик заказов для каждого пользователя.

Интеграция с сервисом оформления заказа (cashier)

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

Технические детали

  • Использовать кеширование для ускорения ответов cashier.
  • Обеспечить идемпотентность обработки событий от OMS.
  • Логировать изменения скидок для аудита.

Пример структуры таблицы скидок

Минимальное количество заказов Скидка (%)
1 5
5 10
10 15

Такой подход позволит легко масштабировать сервис и добавлять новые правила скидок без изменения клиентских сервисов.