Last active
May 26, 2024 11:41
-
-
Save gbzarelli/3977ced1adfc1dcb4afc01552a925aa5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@AllArgsConstructor | |
public class ReshippingOrderUseCase { | |
private final OrderRepository orderRepository; | |
private final CustomerRepository customerRepository; | |
private final OrderRepository orderRepository; | |
private final ShippingProviderClient shippingProviderClient; | |
private final LogisticClient logisticsClient; | |
// Dependência entre use cases: | |
private final ShippingOrderUseCase shippingOrderUseCase; | |
public Shippment reshipOrder(final Long orderId, final Long customerId) { | |
final Order order = orderRepository.findById(orderId); | |
final Customer customer = customerRepository.findById(customerId); | |
final ShippingType shippingType = logisticsClient.getReshippingType(order); | |
//Regras de negócio: | |
if(!order.isAvailableToReshipment()){ | |
throw new OrderNotAvailableToReshipment(order.shippmentStatus()); | |
} | |
//Reutilização de regras de negócios em outro caso de uso: | |
final Order orderReshipped = shippingOrderUseCase.ship(order, shippingType); | |
orderRepository.save(orderReshipped); | |
logisticsClient.updateOrderProvider(orderReshipped, shippingProvider); | |
return Shippment.from(orderShipped); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@AllArgsConstructor | |
public class ShippingOrderUseCase { | |
private final OrderRepository orderRepository; | |
private final CustomerRepository customerRepository; | |
private final OrderRepository orderRepository; | |
private final NotificationService notificationService; | |
private final ShippingProviderClient shippingProviderClient; | |
public Shippment shipOrder(final Long orderId, final Long customerId) { | |
final Order order = orderRepository.findById(orderId); | |
final Customer customer = customerRepository.findById(customerId); | |
Order orderShipped = ship(order, ShippingType.STANDARD) | |
orderRepository.save(orderShipped); | |
return Shippment.from(orderShipped); | |
} | |
//Regras de negócio específicas; Expostas para manter disponível para reutilização: | |
public Order ship(final Order order, final ShippingType shippingType) { | |
ShippingProvider shippingProvider = shippingProviderClient.getAvailableProvider(shippingType); | |
final Order orderShipped = order.setOrderShipped(shippingProvider); | |
if(orderShipped.isExpressShippment()){ | |
shippingProviderClient.notifyExpress(orderShipped); | |
} | |
notificationService.notifyCustomer(orderShipped); | |
return orderShipped; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@AllArgsConstructor | |
public class ReshippingOrderUseCase { | |
private final OrderRepository orderRepository; | |
private final CustomerRepository customerRepository; | |
private final OrderRepository orderRepository; | |
private final ShippingProviderClient shippingProviderClient; | |
private final LogisticClient logisticsClient; | |
private final ShipmentSenderService shipmentSender; | |
public Shippment reshipOrder(final Long orderId, final Long customerId) { | |
final Order order = orderRepository.findById(orderId); | |
final Customer customer = customerRepository.findById(customerId); | |
final ShippingType shippingType = logisticsClient.getReshippingType(order); | |
final Order orderReshipped = shipmentSender.reship(order, shippingType); | |
orderRepository.save(orderReshipped); | |
logisticsClient.updateOrderProvider(orderReshipped, shippingProvider); | |
return Shippment.from(orderShipped); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@AllArgsConstructor | |
public class ShipmentSenderService { | |
private final NotificationService notificationService; | |
private final ShippingProviderClient shippingProviderClient; | |
public Order reship(final Order order, final ShippingType shippingType) { | |
if(order.isAvailableToReshipment()){ | |
return ship(order, shippingType); | |
}else{ | |
throw new OrderNotAvailableToReshipment(order.shippmentStatus()); | |
} | |
} | |
public Order ship(final Order order, final ShippingType shippingType) { | |
ShippingProvider shippingProvider = shippingProviderClient.getAvailableProvider(shippingType); | |
final Order orderShipped = order.setOrderShipped(shippingProvider); | |
if(orderShipped.isExpressShippment()){ | |
shippingProviderClient.notifyExpress(orderShipped); | |
} | |
notificationService.notifyCustomer(orderShipped); | |
return orderShipped; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@AllArgsConstructor | |
public class ShippingOrderUseCase { | |
private final OrderRepository orderRepository; | |
private final CustomerRepository customerRepository; | |
private final OrderRepository orderRepository; | |
private final ShipmentSenderService shipmentSender; | |
public Shippment shipOrder(final Long orderId, final Long customerId) { | |
final Order order = orderRepository.findById(orderId); | |
final Customer customer = customerRepository.findById(customerId); | |
final Order orderShipped = shipmentSender.ship(order, ShippingType.STANDARD); | |
orderRepository.save(orderShipped); | |
return Shippment.from(orderShipped); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment