Sobes.tech
Senior

El producto llegó con la solicitud de desarrollar un servicio de Lealtad, que en función de la cantidad de pedidos entregados (sistema maestro de pedidos OMS) proporcionará al servicio de pago (cajero) el tamaño del descuento. El servicio de Lealtad aún no tendrá una interfaz frontal, solo en la base de datos se debe almacenar un mapeo de cuántos pedidos entregados y no cancelados corresponden a qué descuento. Algo como: Pedidos Descuento [phone]% [phone]% [phone]% [phone]% Es necesario diseñar un servicio, proponer mecanismos de integración con el Servicio de pago y el Servicio de gestión de pedidos. Es necesario diseñar la arquitectura del servicio, que se pueda entregar al equipo de desarrollo y despliegue.

sobes.tech AI

Respuesta de la IA

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

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

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

    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.
  • Логирование и мониторинг для отслеживания корректности работы.

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