Senior
Ապրանքը եկել է հարցմամբ՝ զարգացնել Լոյալտի ծառայություն, որը հիմնված է առաքված պատվերների քանակի վրա (OMS հիմնական համակարգը) և կտրամադրի վճարման ծառայությանը (касса) զեղչի չափը: Լոյալտի ծառայությունը դեռ չի ունենալու առջևի մաս, միայն տվյալների բազայում պետք է պահել համապատասխան հապավումը՝ քանի առաքված և չեղարկված պատվերներ են, և ինչ զեղչ: Ինչ-որ նման: Պատվերներ Զեղչ [phone]% [phone]% [phone]% [phone]% Պետք է նախագծել ծառայություն, առաջարկել ինտեգրման մեխանիզմներ վճարման և պատվերների կառավարման ծառայությունների հետ: Պետք է նախագծել ծառայության ճարտարապետությունը, որը կարող է փոխանցվել զարգացման և տեղադրման թիմին:
sobes.tech AI
Պատասխան 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.
- Логирование и мониторинг для отслеживания корректности работы.
Такой подход позволит отделить бизнес-логику скидок от основных сервисов, обеспечить масштабируемость и простоту поддержки.