public IHttpActionResult Get(string fields = null, string sort = "id", string status = null, string userId = null, int page = 1, int pageSize = maxPageSize) { try { bool includeExpenses = false; List<string> lstOfFields = new List<string>(); // we should include expenses when the fields-string contains "expenses", or "expenses.id", … if (fields != null) { lstOfFields = fields.ToLower().Split(',').ToList(); includeExpenses = lstOfFields.Any(f => f.Contains("expenses")); } int statusId = -1; if (status != null) { switch (status.ToLower()) { case "open": statusId = 1; break; case "confirmed": statusId = 2; break; case "processed": statusId = 3; break; default: break; } } IQueryable<Repository.Entities.ExpenseGroup> expenseGroups = null; if (includeExpenses) { expenseGroups = _repository.GetExpenseGroupsWithExpenses(); } else { expenseGroups = _repository.GetExpenseGroups(); } expenseGroups = expenseGroups.ApplySort(sort) .Where(eg => (statusId == -1 || eg.ExpenseGroupStatusId == statusId)) .Where(eg => (userId == null || eg.UserId == userId)); // ensure the page size isn't larger than the maximum. if (pageSize > maxPageSize) { pageSize = maxPageSize; } // calculate data for metadata var totalCount = expenseGroups.Count(); var totalPages = (int)Math.Ceiling((double)totalCount / pageSize); var urlHelper = new UrlHelper(Request); var prevLink = page > 1 ? urlHelper.Link("ExpenseGroupsList", new { page = page - 1, pageSize = pageSize, sort = sort , fields = fields , status = status, userId = userId }) : ""; var nextLink = page < totalPages ? urlHelper.Link("ExpenseGroupsList", new { page = page + 1, pageSize = pageSize, sort = sort , fields = fields , status = status, userId = userId }) : ""; var paginationHeader = new { currentPage = page, pageSize = pageSize, totalCount = totalCount, totalPages = totalPages, previousPageLink = prevLink, nextPageLink = nextLink }; HttpContext.Current.Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader)); // return result return Ok(expenseGroups .Skip(pageSize * (page - 1)) .Take(pageSize) .ToList() .Select(eg => _expenseGroupFactory.CreateDataShapedObject(eg, lstOfFields))); } catch (Exception) { return InternalServerError(); } }
public IHttpActionResult Get(int expenseGroupId, string sort = "date" , int page = 1, int pageSize = maxPageSize) { try { var expenses = _repository.GetExpenses(expenseGroupId); if (expenses == null) { // this means the expensegroup doesn't exist return NotFound(); } // ensure the page size isn't larger than the maximum. if (pageSize > maxPageSize) { pageSize = maxPageSize; } // calculate data for metadata var totalCount = expenses.Count(); var totalPages = (int)Math.Ceiling((double)totalCount / pageSize); var urlHelper = new UrlHelper(Request); var prevLink = page > 1 ? urlHelper.Link("ExpensesForGroup", new { page = page - 1, pageSize = pageSize, expenseGroupId = expenseGroupId, sort = sort }) : ""; var nextLink = page < totalPages ? urlHelper.Link("ExpensesForGroup", new { page = page + 1, pageSize = pageSize, expenseGroupId = expenseGroupId, sort = sort }) : ""; var paginationHeader = new { currentPage = page, pageSize = pageSize, totalCount = totalCount, totalPages = totalPages, previousPageLink = prevLink, nextPageLink = nextLink }; HttpContext.Current.Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader)); var expensesResult = expenses .ApplySort(sort) .Skip(pageSize * (page - 1)) .Take(pageSize) .ToList() .Select(exp => _expenseFactory.CreateExpense(exp)); return Ok(expensesResult); } catch (Exception) { return InternalServerError(); } }
public IHttpActionResult Get(int expenseGroupId, string sort = "date", string fields = null, int page = 1, int pageSize = MaxPageSize) { try { var listOfFields = new List<string>(); if (fields != null) { listOfFields = fields.ToLower().Split(',').ToList(); } var expenses = _repository.GetExpenses(expenseGroupId); if (expenses == null) { return this.NotFound(); } if (pageSize < MaxPageSize) { pageSize = MaxPageSize; } var totalCount = expenses.Count(); var totalPages = (int)Math.Ceiling((double)totalCount / pageSize); var urlHelper = new UrlHelper(Request); var prevLink = page > 1 ? urlHelper.Link( "ExpensesForGroup", new { page = page - 1, pageSize = pageSize, expenseGroupId = expenseGroupId, sort = sort, fields = fields }) : ""; var nextLink = page < totalPages ? urlHelper.Link( "ExpensesForGroup", new { page = page + 1, pageSize = pageSize, expenseGroupId = expenseGroupId, sort = sort, fields = fields }) : ""; var paginationHeader = new { currentPage = page, pageSize = pageSize, totalCount = totalCount, totalPages = totalPages, previousPageLink = prevLink, nextPageLnk = nextLink }; HttpContext.Current.Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationHeader)); var expensesResult = expenses .ApplySort(sort) .Skip(pageSize * (page -1)) .Take(pageSize) .ToList().Select(exp => _expenseFactory.CreateDataShapedObject(exp, listOfFields)); return this.Ok(expensesResult); } catch (Exception) { return this.InternalServerError(); } }
public IHttpActionResult Get(string sort = "id", string status = null, string userId = null, string fields = null, int page = 1, int pageSize = MaxPageSize) { try { var includeExpenses = false; var listOfFileds = new List<String>(); if (fields != null) { listOfFileds = fields.ToLower().Split(',').ToList(); includeExpenses = listOfFileds.Any(x => x.Contains("expenses")); } int statusId = -1; if (status != null) { switch (status.ToLower()) { case "open": statusId = 1; break; case "confirmed": statusId = 2; break; case "processed": statusId = 3; break; } } IQueryable<Repository.Entities.ExpenseGroup> expenseGroups = null; if (includeExpenses) { expenseGroups = _repository.GetExpenseGroupsWithExpenses(); } else { expenseGroups = _repository.GetExpenseGroups(); } expenseGroups = expenseGroups.ApplySort(sort) .Where(x => (statusId == -1 || x.ExpenseGroupStatusId == statusId)) .Where(x => (userId == null || x.UserId == userId)); var totalCount = expenseGroups.Count(); var totalPages = (int)Math.Ceiling((double)totalCount / pageSize); var urlHelper = new UrlHelper(Request); var prevLink = page > 1 ? urlHelper.Link( "ExpenseGroupList", new { page = page - 1, pageSize = pageSize, sort = sort, status = status, userid = userId, fields = fields }) : ""; var nextLink = page < totalPages ? urlHelper.Link("ExpenseGroupList", new { page = page + 1, pageSize = pageSize, sort = sort, status = status, userId = userId, fields = fields }) : ""; var paginationHeader = new { currentPage = page, pageSize = pageSize, totalCount = totalCount, totalPages = totalPages, previousPageLink = prevLink, nextPageLink = nextLink }; HttpContext.Current.Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationHeader)); return Ok(expenseGroups .Skip(pageSize * (page -1)) .Take(pageSize) .ToList() .Select(x=> _expenseGroupFactory.CreateDataShapedObject(x, listOfFileds))); } catch (Exception) { return InternalServerError(); } }