public async Task <IActionResult> GetOrder([FromRoute] string accountId, [FromQuery] GetOrderHttpRequest?getOrderHttpRequest)
        {
            if (!HttpContext.User.IsInRole("Admin"))
            {
                if (!HttpContext.HasAccountId(accountId))
                {
                    throw new ForbiddenException();
                }
            }

            var queryOrderCommand = new QueryOrderCommand(accountId)
            {
                Offset = getOrderHttpRequest?.Offset ?? 0,
                Limit  = getOrderHttpRequest?.Limit ?? 10
            };
            PaginatedCollection <OrderResponse> paginatedCollection = await _executionContext.ExecuteAsync(queryOrderCommand, CancellationToken.None);

            var result = new PaginatedCollection <OrderHttpResponse>(paginatedCollection.TotalCount,
                                                                     paginatedCollection.Data
                                                                     .Select(orderResponse => new OrderHttpResponse
            {
                OrderId             = orderResponse.OrderId.Value.ToString(),
                OrderStatus         = orderResponse.OrderStatus,
                OrderItemHttpModels = orderResponse.OrderItems.Select(item => new OrderItemHttpModel
                {
                    ProductId = item.ProductId,
                    Quantity  = item.Quantity
                })
                                      .ToList()
            }));

            return(StatusCode((int)HttpStatusCode.OK, result));
        }
Beispiel #2
0
        public async Task <PaginatedCollection <OrderResponse> > Handle(QueryOrderCommand request, CancellationToken cancellationToken)
        {
            var specification = new AccountIdIs(request.AccountId);

            IOrderRepository            orderRepository = _orderDbContext.OrderRepository;
            PaginatedCollection <Order> order           = await orderRepository.GetAsync(specification, request.Offset, request.Limit, cancellationToken);

            PaginatedCollection <OrderResponse> result = new PaginatedCollection <OrderResponse>(order.TotalCount,
                                                                                                 order.Data
                                                                                                 .Select(x => new OrderResponse(x.Id, x.OrderStatus, x.OrderLines.Select(line => line.OrderItem).ToList())));

            return(result);
        }