public async Task <IActionResult> GetOrders([FromQuery] OrderQueryDto queryDto) { IEnumerable <OrderViewModel> orders = default; if (!queryDto.Cacheable) { orders = await _mediator.Send(queryDto); return(Ok(orders)); } var cacheKey = $"order-{queryDto.CustomerId}-{queryDto.OrderId}-{queryDto.DeliveredAt}-{queryDto.OrderedAt}-{queryDto.IsDelivered}-{queryDto.Cacheable}"; orders = await _redisCacheClient.GetAsync <IEnumerable <OrderViewModel> >(cacheKey); if (orders != null) { Response.Headers.Add("X-DataSource", $"From-Cache"); return(Ok(orders)); } orders = await _mediator.Send(queryDto); if (orders.Any()) { await _redisCacheClient.AddAsync(cacheKey, orders, 300); } return(Ok(orders)); }
public IActionResult Query([FromQuery] OrderQueryDto query) => _mapper.Map <OrderQueryModel>(query) .Map(_queryRepo.Query) .Map(_mapper.Map <PagingResult <OrderDto> >) .Map(x => AllOk(x)) .Reduce(_ => BadRequest(), error => error is ArgumentNotSet, x => _logger.LogError(x.ToString())) .Reduce(_ => InternalServerError(), x => _logger.LogError(x.ToString()));
public async Task <IActionResult> GetAgentOrdersAsync(OrderQueryDto orderQueryDto) { var loggedAgentEmail = HttpContext.User.Claims.FirstOrDefault(u => u.Type.Equals("email")).Value; var agent = await userService.GetUserByEmailAsync(loggedAgentEmail); var orderQuery = mapper.Map <OrderQueryDto, OrderQuery>(orderQueryDto); var orders = await orderService.GetAgentOrdersAsync(agent.Id, orderQuery); var ordersDto = mapper.Map <QueryResult <Order>, QueryResultDto <OrderDto> >(orders); return(Ok(ordersDto)); }
public async Task <IEnumerable <OrderViewModel> > Handle(OrderQueryDto request, CancellationToken cancellationToken) { var query = _orderDbContext.Orders.AsQueryable(); if (request.CustomerId is not null) { query = query.Where(p => p.CustomerId == request.CustomerId); } if (request.OrderId is not null) { query = query.Where(p => p.Id == request.OrderId); } if (request.OrderedAt is not null) { query = query.Where(p => p.OrderdAt >= request.OrderedAt && p.OrderdAt <= request.OrderedAt); } if (request.DeliveredAt is not null) { query = query.Where(p => p.DeliveredAt >= request.DeliveredAt && p.DeliveredAt <= request.DeliveredAt); } if (request.IsDelivered is not null) { query = query.Where(p => p.IsDelivered == request.IsDelivered); } var orders = await query .ProjectTo <OrderViewModel>(_mapper.ConfigurationProvider) .ToListAsync(cancellationToken: cancellationToken); return(orders); }
public async Task <IActionResult> GetAgentOrdersByAgentIdAsync(string agentId, OrderQueryDto orderQueryDto) { var orderQuery = mapper.Map <OrderQueryDto, OrderQuery>(orderQueryDto); var orders = await orderService.GetAgentOrdersAsync(agentId, orderQuery); var ordersDto = mapper.Map <QueryResult <Order>, QueryResultDto <OrderDto> >(orders); return(Ok(ordersDto)); }