Sobes.tech
Senior

Le produit est arrivé avec la demande de développer un service de Fidélité, qui, en fonction du nombre de commandes livrées (système maître des commandes OMS), fournira au service de paiement (caissier) la taille de la remise. Le service de Fidélité n'aura pas encore de partie frontale, il faut simplement stocker dans la base de données une correspondance entre le nombre de commandes livrées et non annulées et la remise correspondante. Quelque chose comme: Commandes Remise [phone]% [phone]% [phone]% [phone]% Il faut concevoir un service, proposer des mécanismes d'intégration avec le Service de paiement et le Service de gestion des commandes. Il faut concevoir l'architecture du service, qui pourra être transmise à l'équipe de développement et de déploiement.

sobes.tech IA

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

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