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.
- Логирование и мониторинг для отслеживания корректности работы.
Такой подход позволит отделить бизнес-логику скидок от основных сервисов, обеспечить масштабируемость и простоту поддержки.