Sobes.tech
Назад к вопросам
Senior
4

Продукт пришел с запросом разработать сервис Лояльности, который на основе количества доставленных заказов (мастер-система по заказам OMS) будет отдавать сервису оформления заказа (cashier) размер скидки. Сервис Лояльности пока не будет иметь фронтовой части, только в БД надо хранить маппинг от какого количества доставленных и не отменённых заказов какая скидка. Что-то вида Заказов Скидка [phone]% [phone]% [phone]% [phone]% Необходимо спроектировать сервис, предложить механизмы интеграции с Сервисом оформления заказа и Сервисом управления заказами. Необходимо спроектировать архитектуру сервиса, которую можно будет передать в команду разработки и развертывания.

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Для сервиса Лояльности предлагается следующая архитектура и интеграция:

Архитектура сервиса Лояльности

  • Хранение данных: таблица в БД с маппингом количества доставленных и не отменённых заказов на размер скидки.

    CREATE TABLE loyalty_discounts (
      min_orders INT PRIMARY KEY,
      discount_percent DECIMAL(5,2)
    );
    
  • API сервиса: REST или gRPC интерфейс, предоставляющий метод получения скидки по количеству заказов.

    // Пример метода на Java
    public BigDecimal getDiscount(int deliveredOrders) {
        // Логика выбора максимальной скидки, где min_orders <= deliveredOrders
    }
    

Интеграция с другими сервисами

  • Сервис управления заказами (OMS):

    • Отвечает за учёт и обновление статусов заказов.
    • При изменении статуса заказа (доставлен, отменён) отправляет событие (например, через Kafka или RabbitMQ) в сервис Лояльности.
  • Сервис Лояльности:

    • Подписывается на события OMS.
    • Обновляет внутренние данные о количестве доставленных заказов для каждого пользователя.
  • Сервис оформления заказа (cashier):

    • При оформлении заказа запрашивает у сервиса Лояльности размер скидки по идентификатору пользователя.
    • Применяет скидку к заказу.

Дополнительно

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

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