using Microsoft.EntityFrameworkCore; using Netina.Domain.Entities.Orders; namespace Netina.Repository.Handlers.Orders; public class GetUserOrdersQueryHandler : IRequestHandler> { private readonly ICurrentUserService _currentUserService; private readonly IRepositoryWrapper _repositoryWrapper; public GetUserOrdersQueryHandler(ICurrentUserService currentUserService,IRepositoryWrapper repositoryWrapper) { _currentUserService = currentUserService; _repositoryWrapper = repositoryWrapper; } public async Task> Handle(GetUserOrdersQuery request, CancellationToken cancellationToken) { Guid customerId = Guid.Empty; if (request.CustomerId == default) { if (_currentUserService.UserId == null) throw new AppException("Token is wrong", ApiResultStatusCode.UnAuthorized); if (!Guid.TryParse(_currentUserService.UserId, out Guid userId)) throw new AppException("Token is wrong", ApiResultStatusCode.UnAuthorized); var customer = await _repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(c => c.UserId == userId, cancellationToken); if (customer == null) throw new AppException("User is not a customer"); customerId = customer.Id; } else customerId = request.CustomerId; var orders = await _repositoryWrapper.SetRepository() .TableNoTracking .Where(o => o.CustomerId == customerId) .Select(OrderMapper.ProjectToSDto) .ToListAsync(cancellationToken); return orders; } }