Beispiel #1
0
        public IActionResult Get(int expenseGroupId, [FromQuery] ExpenseResourceParameters expenseResourceParameters)
        {
            var expensesFromRepo = _repo.GetExpenses(expenseGroupId, expenseResourceParameters);

            if (expensesFromRepo == null)
            {
                return(NotFound());
            }

            var previousPageLink = expensesFromRepo.HasPrevious ? CreateExpensesResourceUri(expenseResourceParameters, ResourceUriType.PreviousPage) : null;
            var nextPageLink     = expensesFromRepo.HasNext ? CreateExpensesResourceUri(expenseResourceParameters, ResourceUriType.NextPage) : null;

            var paginationMetadata = new
            {
                totalCount       = expensesFromRepo.TotalCount,
                pageSize         = expensesFromRepo.PageSize,
                currentPage      = expensesFromRepo.CurrentPage,
                totalPages       = expensesFromRepo.TotalPages,
                previousPageLink = previousPageLink,
                nextPageLink     = nextPageLink
            };

            Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));
            var expenses = Mapper.Map <IEnumerable <DTO.Expense> >(expensesFromRepo);

            return(Ok(expenses));
        }
Beispiel #2
0
        private string CreateExpensesResourceUri(ExpenseResourceParameters expenseResourceParameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(_urlHelper.Link("Get",
                                       new
                {
                    pageNumber = expenseResourceParameters.PageNumber - 1,
                    pageSize = expenseResourceParameters.PageSize,
                    description = expenseResourceParameters.Description
                }));

            case ResourceUriType.NextPage:
                return(_urlHelper.Link("Get",
                                       new
                {
                    pageNumber = expenseResourceParameters.PageNumber + 1,
                    pageSize = expenseResourceParameters.PageSize,
                    description = expenseResourceParameters.Description
                }));

            default:
                return(_urlHelper.Link("Get",
                                       new
                {
                    pageNumber = expenseResourceParameters.PageNumber,
                    pageSize = expenseResourceParameters.PageSize,
                    description = expenseResourceParameters.Description
                }));
            }
        }
Beispiel #3
0
        public PagedList <Expense> GetExpenses(int expenseGroupId, ExpenseResourceParameters expenseResourceParameters)
        {
            var correctGroup = _ctx.ExpenseGroup.FirstOrDefault(eg => eg.Id == expenseGroupId);

            if (correctGroup != null)
            {
                var expenses = _ctx.Expense.Where(x => x.ExpenseGroupId == correctGroup.Id);
                if (!string.IsNullOrEmpty(expenseResourceParameters.Description))
                {
                    var descriptionForWhereClause = expenseResourceParameters.Description.Trim().ToLowerInvariant();
                    expenses = expenses.Where(a => a.Description.ToLowerInvariant() == descriptionForWhereClause);
                }

                return(PagedList <Expense>
                       .Create(expenses,
                               expenseResourceParameters.PageNumber,
                               expenseResourceParameters.PageSize));
            }
            else
            {
                var expenses = _ctx.Expense.ToList().AsQueryable();


                if (!string.IsNullOrEmpty(expenseResourceParameters.Description))
                {
                    var descriptionForWhereClause = expenseResourceParameters.Description.Trim().ToLowerInvariant();
                    expenses = expenses.Where(a => a.Description.ToLowerInvariant() == descriptionForWhereClause);
                }

                return(PagedList <Expense>
                       .Create(expenses,
                               expenseResourceParameters.PageNumber,
                               expenseResourceParameters.PageSize));
            }
        }