using NetinaShop.Domain.Entities.Orders; using NetinaShop.Domain.Entities.Warehouses; namespace NetinaShop.Repository.Handlers.OrderBags; public class SubmitOrderDeliveryCommandHandler : IRequestHandler { private readonly IMediator _mediator; private readonly IRepositoryWrapper _repositoryWrapper; public SubmitOrderDeliveryCommandHandler(IMediator mediator, IRepositoryWrapper repositoryWrapper) { _mediator = mediator; _repositoryWrapper = repositoryWrapper; } public async Task Handle(SubmitOrderDeliveryCommand request, CancellationToken cancellationToken) { var order = await _mediator.Send(new GetOrderQuery(request.OrderId), cancellationToken); var shipping = await _repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(s => s.Id == request.ShippingId, cancellationToken); if (shipping == null) throw new AppException("Shipping not found", ApiResultStatusCode.NotFound); foreach (var orderDelivery in order.OrderDeliveries) { _repositoryWrapper.SetRepository() .Delete(orderDelivery); await _repositoryWrapper.SaveChangesAsync(cancellationToken); } order.OrderDeliveries.Clear(); order.AddOrderDelivery(request.Address,request.PostalCode,request.ReceiverPhoneNumber,request.ReceiverFullName,shipping.DeliveryCost,request.ShippingId,request.OrderId); _repositoryWrapper.SetRepository().Update(order); await _repositoryWrapper.SaveChangesAsync(cancellationToken); await _mediator.Send(new CalculateOrderCommand(order.Id), cancellationToken); return true; } }