using NetinaShop.Domain.Entities.Orders; namespace NetinaShop.Repository.Handlers.OrderBags; public class GetUserOrderBagQueryHandler : IRequestHandler { private readonly IRepositoryWrapper _repositoryWrapper; private readonly ICurrentUserService _currentUserService; private readonly IMediator _mediator; public GetUserOrderBagQueryHandler(IRepositoryWrapper repositoryWrapper,ICurrentUserService currentUserService,IMediator mediator) { _repositoryWrapper = repositoryWrapper; _currentUserService = currentUserService; _mediator = mediator; } public async Task Handle(GetUserOrderBagQuery 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 order = await _repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(o => o.UserId == userId && o.OrderStatus == OrderStatus.OrderBag,cancellationToken); if (order == null) order = await _mediator.Send(new CreateBaseOrderCommand(userId),cancellationToken); else { var orderProducts = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(op=>op.OrderId==order.Id) .ToListAsync(cancellationToken); orderProducts.ForEach(op=>order.AddOrderProduct(op)); } return order; } }