Exemple #1
0
        public async Task <IActionResult> GetHateaos(OrderQueryParameter parameter)
        {
            if (!_propertyMappingContainer.ValidateMappingExsitFor <OrderResourceModel, Order>(parameter.OrderBy))
            {
                return(BadRequest("Can't finds fields for sorting"));
            }

            if (!_typeHelperService.TypeHasProperties <OrderResourceModel>(parameter.Fields))
            {
                return(BadRequest("Fields not exist"));
            }

            var paginatedList = await _orderRepository.GetOrdersAsync(parameter);

            var orderResourceModel = _mapper.Map <IEnumerable <Order>, IEnumerable <OrderResourceModel> >(paginatedList);

            var previousPageLink = paginatedList.HasPrevious ? CreateOrderUrl(parameter, PaginatedUrlType.PreviousPage) : null;
            var nextPageLink     = paginatedList.HasNext ? CreateOrderUrl(parameter, PaginatedUrlType.NextPage) : null;
            var meta             = new
            {
                paginatedList.PageIndex,
                paginatedList.PageSize,
                paginatedList.TotalItemCount,
                paginatedList.PageCount,
            };

            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(meta, new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }));
            var shapeOrderResources = orderResourceModel.ToDynamicIEnumerable(parameter.Fields);

            _logger.LogInformation(JsonConvert.SerializeObject(shapeOrderResources));

            var shapedWithLinks = shapeOrderResources.Select(x =>
            {
                var dict       = x as IDictionary <string, object>;
                var orderLinks = CreateLinksForOrder((Guid)dict["Id"], parameter.Fields);
                dict.Add("links", orderLinks);
                return(dict);
            });
            var links  = CreateLinksForOrders(parameter, paginatedList.HasPrevious, paginatedList.HasNext);
            var result = new
            {
                value = shapedWithLinks,
                links
            };

            return(Ok(result));
        }
Exemple #2
0
        private string CreateOrderUrl(OrderQueryParameter parameter, PaginatedUrlType paginatedUrlType)
        {
            switch (paginatedUrlType)
            {
            case PaginatedUrlType.PreviousPage:
                parameter.PageIndex -= 1;
                return(_urlHelper.Link("GetOrders", parameter));

            case PaginatedUrlType.NextPage:
                parameter.PageIndex += 1;
                return(_urlHelper.Link("GetOrders", parameter));

            default:
                return(_urlHelper.Link("GetOrders", parameter));
            }
        }
Exemple #3
0
        private IEnumerable <LinkResourceModel> CreateLinksForOrders(OrderQueryParameter orderQueryParameter, bool hasPrevious, bool hasNext)
        {
            var links = new List <LinkResourceModel>
            {
                new LinkResourceModel(CreateOrderUrl(orderQueryParameter, PaginatedUrlType.CurrentPage), "self", "GET")
            };

            if (hasPrevious)
            {
                links.Add(new LinkResourceModel(CreateOrderUrl(orderQueryParameter, PaginatedUrlType.PreviousPage), "previous_page", "GET"));
            }
            if (hasNext)
            {
                links.Add(new LinkResourceModel(CreateOrderUrl(orderQueryParameter, PaginatedUrlType.NextPage), "next_page", "GET"));
            }
            return(links);
        }
Exemple #4
0
        public async Task <PaginatedList <Order> > GetOrdersAsync(OrderQueryParameter orderQueryParameter)
        {
            var query = _dbContext.Orders.OrderBy(x => x.Id).AsQueryable();

            if (!string.IsNullOrEmpty(orderQueryParameter.OrderNo))
            {
                query = query.Where(x => x.OrderNo == orderQueryParameter.OrderNo);
            }
            if (!string.IsNullOrEmpty(orderQueryParameter.ReciverName))
            {
                query = query.Where(x => x.ReciverName == orderQueryParameter.ReciverName);
            }
            if (!string.IsNullOrEmpty(orderQueryParameter.ReciverMobile))
            {
                query = query.Where(x => x.ReciverMobile == orderQueryParameter.ReciverMobile);
            }
            if (!string.IsNullOrEmpty(orderQueryParameter.ReciverProvince))
            {
                query = query.Where(x => x.ReciverProvince == orderQueryParameter.ReciverProvince);
            }
            if (!string.IsNullOrEmpty(orderQueryParameter.ReciverCity))
            {
                query = query.Where(x => x.ReciverCity == orderQueryParameter.ReciverCity);
            }
            if (!string.IsNullOrEmpty(orderQueryParameter.ReciverDistrict))
            {
                query = query.Where(x => x.ReciverDistrict == orderQueryParameter.ReciverDistrict);
            }

            _logger.LogInformation($"Order By => {orderQueryParameter.OrderBy}");

            query = query.ApplySort(orderQueryParameter.OrderBy,
                                    _propertyMappingContainer.Resolve <OrderResourceModel, Order>());

            var count = await query.CountAsync();

            query = query.Skip(orderQueryParameter.PageIndex * orderQueryParameter.PageSize)
                    .Take(orderQueryParameter.PageSize);

            var data = await query.ToListAsync();

            var paginatedList = new PaginatedList <Order>(orderQueryParameter.PageIndex, orderQueryParameter.PageSize, count, data);

            return(paginatedList);
        }
Exemple #5
0
        public async Task <IActionResult> Get(OrderQueryParameter parameter)
        {
            if (!_propertyMappingContainer.ValidateMappingExsitFor <OrderResourceModel, Order>(parameter.OrderBy))
            {
                return(BadRequest("Can't finds fields for sorting"));
            }

            if (!_typeHelperService.TypeHasProperties <OrderResourceModel>(parameter.Fields))
            {
                return(BadRequest("Fields not exist"));
            }

            var paginatedList = await _orderRepository.GetOrdersAsync(parameter);

            var orderResourceModel = _mapper.Map <IEnumerable <Order>, IEnumerable <OrderResourceModel> >(paginatedList);

            var previousPageLink = paginatedList.HasPrevious ? CreateOrderUrl(parameter, PaginatedUrlType.PreviousPage) : null;
            var nextPageLink     = paginatedList.HasNext ? CreateOrderUrl(parameter, PaginatedUrlType.NextPage) : null;
            var meta             = new
            {
                paginatedList.PageIndex,
                paginatedList.PageSize,
                paginatedList.TotalItemCount,
                paginatedList.PageCount,
                previousPageLink,
                nextPageLink
            };

            Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(meta, new JsonSerializerSettings()
            {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            }));
            var shapeOrderResources = orderResourceModel.ToDynamicIEnumerable(parameter.Fields);

            return(Ok(shapeOrderResources));
        }