Senior
75
Het product kwam met de vraag om een Loyaliteitsservice te ontwikkelen, die op basis van het aantal bezorgde bestellingen (hoofdordersysteem OMS) de kortingsgrootte aan de bestelservice (kassa) doorgeeft. De Loyaliteitsservice zal nog geen frontend hebben, alleen in de database moet een mapping worden opgeslagen van welk aantal bezorgde en niet geannuleerde bestellingen welke korting geeft. Iets als: Bestellingen Korting [phone]% [phone]% [phone]% [phone]% Het is nodig om een service te ontwerpen, mechanismen voor integratie met de bestelservice en de ordermanagementservice voor te stellen. Het is nodig om de architectuur van de service te ontwerpen, die aan het ontwikkel- en implementatieteam kan worden doorgegeven.
Bedrijven waar gevraagd werd
Antwoord van AI
sobes.tech AI
Для сервиса Лояльности, который на основе количества доставленных и не отменённых заказов выдаёт размер скидки, предлагаю следующую архитектуру и интеграционные механизмы:
Архитектура сервиса
- Хранение данных: В базе данных хранится таблица с маппингом "минимальное количество заказов" → "размер скидки".
- API: RESTful или gRPC сервис с методами:
- Получить скидку по количеству заказов
- Обновить правила скидок (администрирование)
Интеграция с OMS (сервис управления заказами)
- OMS отправляет события о доставленных и не отменённых заказах (например, через очередь сообщений или webhook).
- Сервис Лояльности подписывается на эти события и обновляет внутренний счётчик заказов для каждого пользователя.
Интеграция с сервисом оформления заказа (cashier)
- При оформлении заказа cashier запрашивает у сервиса Лояльности текущий размер скидки для пользователя.
- Сервис Лояльности возвращает актуальную скидку на основе количества доставленных заказов.
Технические детали
- Использовать кеширование для ускорения ответов cashier.
- Обеспечить идемпотентность обработки событий от OMS.
- Логировать изменения скидок для аудита.
Пример структуры таблицы скидок
| Минимальное количество заказов | Скидка (%) |
|---|---|
| 1 | 5 |
| 5 | 10 |
| 10 | 15 |
Такой подход позволит легко масштабировать сервис и добавлять новые правила скидок без изменения клиентских сервисов.