46 lines
2.1 KiB
C#
46 lines
2.1 KiB
C#
using NetinaShop.Domain.Entities.Warehouses;
|
|
|
|
namespace NetinaShop.Core.EntityServices.OrderBagHandlers;
|
|
|
|
public class SubmitOrderDeliveryCommandHandler : IRequestHandler<SubmitOrderDeliveryCommand, OrderSDto>
|
|
{
|
|
private readonly IMediator _mediator;
|
|
private readonly IRepositoryWrapper _repositoryWrapper;
|
|
|
|
public SubmitOrderDeliveryCommandHandler(IMediator mediator, IRepositoryWrapper repositoryWrapper)
|
|
{
|
|
_mediator = mediator;
|
|
_repositoryWrapper = repositoryWrapper;
|
|
}
|
|
public async Task<OrderSDto> Handle(SubmitOrderDeliveryCommand request, CancellationToken cancellationToken)
|
|
{
|
|
var order = await _mediator.Send(new GetOrderQuery(request.OrderId), cancellationToken);
|
|
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);
|
|
if (order.OrderDeliveries.Count > 0)
|
|
{
|
|
foreach (var orderDelivery in order.OrderDeliveries)
|
|
{
|
|
var newEnt = OrderDelivery.Create(request.AddressId, shipping.DeliveryCost, request.ShippingId,
|
|
request.OrderId);
|
|
newEnt.CreatedAt = orderDelivery.CreatedAt;
|
|
newEnt.CreatedBy = orderDelivery.CreatedBy;
|
|
newEnt.Id = orderDelivery.Id;
|
|
_repositoryWrapper.SetRepository<OrderDelivery>()
|
|
.Update(newEnt);
|
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
|
}
|
|
order.OrderDeliveries.Clear();
|
|
}
|
|
else
|
|
order.AddOrderDelivery(request.AddressId, shipping.DeliveryCost, request.ShippingId, request.OrderId);
|
|
|
|
_repositoryWrapper.SetRepository<Order>().Update(order);
|
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
|
var calculatedOrder = await _mediator.Send(new CalculateOrderCommand(order.Id), cancellationToken);
|
|
return calculatedOrder.AdaptToSDto();
|
|
}
|
|
} |