-
Notifications
You must be signed in to change notification settings - Fork 0
feat: Завершение e-commerce платформы (Order, Payment, Delivery) #12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…rrorDto in all specs
kesch9
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Несколько комментариев
| .orElseThrow(() -> new DeliveryNotFoundException(orderDto.getOrderId())); | ||
|
|
||
| BigDecimal baseCost = new BigDecimal("5.0"); | ||
| BigDecimal cost = new BigDecimal("5.0"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Как вариант, можно вынести в настройки все коэффициент
|
|
||
| public interface JpaPaymentRepositoryInterface extends JpaRepository<Payment, UUID> { | ||
|
|
||
| Optional<Payment> findByOrderId(UUID orderId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Метод не используется можно удалить
|
|
||
| Optional<Payment> findById(UUID paymentId); | ||
|
|
||
| Optional<Payment> findByOrderId(UUID orderId); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Также метод не используется
| public interface PaymentClient { | ||
|
|
||
| @PostMapping | ||
| PaymentDto createPayment(@RequestBody OrderDto order); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| import org.mapstruct.Mapper; | ||
|
|
||
| @Mapper(componentModel = "spring") | ||
| public interface AddressApiMapper { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Выносить в api mapper думаю излишни, они используется только в одном сервисе, там их и реализовать, в общий модуль не нужно
kesch9
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Approve
Этот Pull Request завершает работу над e-commerce частью проекта, добавляя сервисы
order,paymentиdelivery, а также настраивая API Gateway.Что было сделано:
Реализованы новые сервисы:
order,payment,delivery. Каждый из них работает со своей выделенной БД, получает конфигурацию из Config Server и регистрируется в Eureka.Оркестратор (
order-сервис): Основной методcreateNewOrderкоординирует взаимодействие других сервисов, последовательно обращаясь кwarehouse,deliveryиpaymentдля резервации товаров, планирования доставки и создания платежа.Взаимодействие через Feign: Вся коммуникация между сервисами построена на декларативных Feign-клиентах, что делает код чистым и читаемым.
API Gateway: Настроен шлюз (
api-gateway), который теперь является единой точкой входа для всех сервисовcommerce.Архитектурные решения и компромиссы:
В процессе работы я столкнулся с несколькими сложностями, связанными со спецификацией API.
API контракты (
order.json): Изначальная спецификацияorderсервиса была немного противоречивой, смешивая синхронные и асинхронные (callback) подходы. Чтобы построить логичный и последовательный процесс создания заказа, я постарался приближённо реализовать синхронный подход в создании заказа с дальнейшей асинхронной обработкой оплаты и доставки. В связи с этим некоторые эндпойнты из спецификации оказались избыточными и были "заглушены" с ответом501 Not Implemented.Проблема "фантомных" бронирований: Для реализации полноценного синхронного SAGA-паттерна с компенсирующими транзакциями в спецификации API не хватало эндпойнтов (например, для высвобождения бронирования). В связи с этим в текущей реализации есть риск, например, создания бронированиий товаров, которые не привязаны к существующему заказу в случае, если процесс создания заказа падает уже после создания бронирования. На мой взгляд, оптимальным решением был бы переход на асинхронную, событийно-ориентированную архитектуру с компенсирующими транзакциями, но это выходило далеко за рамки текущего ТЗ.
В целом, я постарался сделать систему максимально надежной в рамках того, как мне удалось интерпретировать предложенную архитектуру.