public async Task <IEnumerable <SalesViewModel> > Handle(SalesQueryDto request, CancellationToken cancellationToken) { var query = _orderDbContext.Sales.AsQueryable(); if (request.CustomerId is not null) { query = query.Where(p => p.CustomerId == request.CustomerId); } if (request.Reference is not null) { query = query.Where(p => p.Reference == request.Reference); } if (request.OperatedBy is not null) { query = query.Where(p => p.OperatedBy == request.OperatedBy); } if (request.SoldAt is not null) { query = query.Where(p => p.SoldAt >= request.SoldAt && p.SoldAt <= request.SoldAt); } var sales = await query .ProjectTo <SalesViewModel>(_mapper.ConfigurationProvider) .ToListAsync(cancellationToken: cancellationToken); return(sales); }
public async Task <IActionResult> GetOrders([FromQuery] SalesQueryDto queryDto) { var cacheKey = $"sales-{queryDto.CustomerId}-{queryDto.Reference}-{queryDto.SoldAt}-{queryDto.OperatedBy}"; var salesFromCache = await _redisCacheClient.GetAsync <IEnumerable <SalesViewModel> >(cacheKey); if (salesFromCache != null) { Response.Headers.Add("X-DataSource", $"From-Cache"); return(Ok(salesFromCache)); } var salesFromDb = await _mediator.Send(queryDto); if (salesFromDb.Any()) { await _redisCacheClient.AddAsync(cacheKey, salesFromDb, 300); } return(Ok(salesFromDb)); }