Api/Netina.Core/EntityServices/OrderBagHandlers/SubmitOrderDeliveryCommandH...

39 lines
1.8 KiB
C#
Raw Normal View History

using Netina.Domain.Entities.Warehouses;
2024-04-16 20:01:34 +03:30
namespace Netina.Core.EntityServices.OrderBagHandlers;
2024-08-09 21:55:16 +03:30
public class SubmitOrderDeliveryCommandHandler(IMediator mediator, IRepositoryWrapper repositoryWrapper)
: IRequestHandler<SubmitOrderDeliveryCommand, OrderSDto>
{
2024-02-12 22:01:15 +03:30
public async Task<OrderSDto> Handle(SubmitOrderDeliveryCommand request, CancellationToken cancellationToken)
{
2024-08-09 21:55:16 +03:30
var order = await repositoryWrapper.SetRepository<Order>()
.TableNoTracking
.FirstOrDefaultAsync(o => o.Id == request.OrderId, cancellationToken);
if (order == null)
throw new AppException("Order not found", ApiResultStatusCode.NotFound);
2024-08-09 21:55:16 +03:30
var orderDelivery = await repositoryWrapper.SetRepository<OrderDelivery>()
.TableNoTracking
.FirstOrDefaultAsync(od => od.OrderId == request.OrderId, cancellationToken);
if (orderDelivery != null)
{
order.AddOrderDelivery(orderDelivery.AddressId, orderDelivery.DeliveryCost, orderDelivery.ShippingId, orderDelivery.OrderId, orderDelivery.Id);
}
2024-08-09 21:55:16 +03:30
var shipping = await repositoryWrapper.SetRepository<Shipping>()
.TableNoTracking
.FirstOrDefaultAsync(s => s.Id == request.ShippingId, cancellationToken);
if (shipping == null)
throw new AppException("Shipping not found", ApiResultStatusCode.NotFound);
order.AddOrderDelivery(request.AddressId, shipping.DeliveryCost, request.ShippingId, request.OrderId);
2024-08-09 21:55:16 +03:30
repositoryWrapper.SetRepository<Order>().Update(order);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
2024-08-09 21:55:16 +03:30
var calculatedOrder = await mediator.Send(new CalculateOrderCommand(order.Id), cancellationToken);
2024-02-12 22:01:15 +03:30
return calculatedOrder.AdaptToSDto();
}
}