using Order = NetinaShop.Domain.Entities.Orders.Order; namespace NetinaShop.Repository.Handlers.OrderBags; public class RemoveFromOrderBagCommandHandler : IRequestHandler { private readonly ICurrentUserService _currentUserService; private readonly IRepositoryWrapper _repositoryWrapper; private readonly IMediator _mediator; public RemoveFromOrderBagCommandHandler(ICurrentUserService currentUserService, IRepositoryWrapper repositoryWrapper,IMediator mediator) { _currentUserService = currentUserService; _repositoryWrapper = repositoryWrapper; _mediator = mediator; } public async Task Handle(RemoveFromOrderBagCommand request, CancellationToken cancellationToken) { if (_currentUserService.UserId == null) throw new AppException("User id notfound", ApiResultStatusCode.BadRequest); if (!Guid.TryParse(_currentUserService.UserId, out Guid userId)) throw new AppException("User id wrong", ApiResultStatusCode.BadRequest); var product = await _repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(p => p.Id == request.ProductId, cancellationToken); if (product == null) throw new AppException("Product not found ", ApiResultStatusCode.NotFound); if (!product.IsEnable) throw new AppException("Product is not enable", ApiResultStatusCode.BadRequest); var orderBag = await _mediator.Send(new GetUserOrderBagQuery(), cancellationToken); orderBag.RemoveFromOrderBag(product, request.Count); _repositoryWrapper.SetRepository().Update(orderBag); await _repositoryWrapper.SaveChangesAsync(cancellationToken); await _mediator.Send(new CalculateOrderCommand(orderBag.Id), cancellationToken); return true; } }