Esempio n. 1
0
        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));
        }
Esempio n. 2
0
 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()));
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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));
        }