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)); }
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 })); } }
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)); } }