using Netina.Domain.Entities.Orders; namespace Netina.Repository.Handlers.Orders; public class GetOrdersQueryHandler(IRepositoryWrapper repositoryWrapper) : IRequestHandler> { public async Task> Handle(GetOrdersQuery request, CancellationToken cancellationToken) { IQueryable orders = repositoryWrapper .SetRepository() .TableNoTracking; if (request.OrderBags) orders = orders.Where(o => o.OrderStatus == OrderStatus.OrderBag); else orders = orders.Where(o => o.OrderStatus != OrderStatus.OrderBag); if (request.FactorCode != null) orders = orders.Where(o => o.FactorCode.Trim().ToUpper().Contains(request.FactorCode.Trim().ToUpper())); if (request.DateFilter != null) { switch (request.DateFilter) { case OrderQueryDateFilter.CustomDate: if (request.SelectedDate != null) orders = orders.Where(o => o.CreatedAt.Date == DateTimeExtensions.UnixTimeStampToDateTime(request.SelectedDate.Value)); else throw new AppException("For custom date you have to send SelectedDate",ApiResultStatusCode.BadRequest); break; case OrderQueryDateFilter.ThisMonth: orders = orders.Where(o => o.CreatedAt.Date >= new DateTime(DateTime.Today.Year,DateTime.Today.Month,1)); break; case OrderQueryDateFilter.ThisWeek: orders = orders.Where(o => o.CreatedAt.Date >= DateTime.Today.AddDays(-7)); break; case OrderQueryDateFilter.Today: orders = orders.Where(o => o.CreatedAt.Date == DateTime.Today.Date); break; default: break; } } if (request.OrderStatus != null) orders = orders.Where(o => o.OrderStatus == request.OrderStatus.Value); var dtos = await orders .OrderByDescending(o=>o.CreatedAt) .Skip(request.Page * 15) .Take(15) .Select(OrderMapper.ProjectToSDto) .ToListAsync(cancellationToken); return dtos; } }