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();
            }
        }
Esempio n. 2
0
        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();
            }
        }