public IHttpActionResult Get(
            string sort   = "date",
            string fields = null,
            int page      = 0,
            int pageSize  = 5
            )
        {
            try
            {
                var expenses = _repository.GetExpenses().ApplySort(sort);

                pageSize = Math.Min(pageSize, maxPageSize);
                var totalCount       = expenses.Count();
                var totalPages       = (int)Math.Ceiling((double)totalCount / pageSize);
                var urlHelper        = new UrlHelper(Request);
                var previousPageLink = page > 0 ? urlHelper.Link("ExpenseList", new
                {
                    page = page - 1,
                    pageSize,
                    sort
                }) : "";
                var nextPageLink = page < page - 1 ? urlHelper.Link("ExpenseList", new
                {
                    page = page + 1,
                    pageSize,
                    sort
                }) : "";
                var paginationHeader = new
                {
                    currentPage = page,
                    pageSize,
                    totalCount,
                    totalPages,
                    previousPageLink,
                    nextPageLink
                };

                HttpContext.Current.Response.Headers.Add("x-pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader));

                var expenseResults = expenses
                                     .Skip(page * pageSize)
                                     .Take(pageSize)
                                     .ToList()
                                     .Select(e => _expenseFactory.CreateExpense(e));

                return(Ok(expenseResults));
            } catch (Exception e)
            {
                return(InternalServerError(e));
            }
        }
        public IHttpActionResult Get()
        {
            try
            {
                var expenses = _repository.GetExpenses().ToList().Select(exp => _expenseFactory.CreateExpense(exp));

                if (expenses == null)
                {
                    return(BadRequest());
                }
                return(Ok(expenses));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Example #3
0
        public IHttpActionResult Get(int expenseGroupId)
        {
            try
            {
                var expenses = _repository.GetExpenses(expenseGroupId);
                if (expenses == null)
                {
                    return(NotFound());
                }

                var expensesResult = expenses.ToList()
                                     .Select(exp => _expenseFactory.CreateExpense(exp));
                return(Ok(expensesResult));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Example #4
0
        public IHttpActionResult Get(int id, int?expenseGroupId = null)
        {
            try
            {
                Repository.Entities.Expense expense = null;

                if (expenseGroupId == null)
                {
                    expense = _repository.GetExpense(id);
                }
                else
                {
                    var expensesForGroup = _repository.GetExpenses((int)expenseGroupId);

                    // if the group doesn't exist, we shouldn't try to get the expenses
                    if (expensesForGroup != null)
                    {
                        expense = expensesForGroup.FirstOrDefault(eg => eg.Id == id);
                    }
                }

                if (expense != null)
                {
                    var returnValue = _expenseFactory.CreateExpense(expense);
                    return(Ok(returnValue));
                }
                else
                {
                    return(NotFound());
                }
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
        public IHttpActionResult Get(int expenseGroupId, string sort = "date",
                                     string fields = null, int page = 1, int pageSize = maxPageSize)
        {
            try
            {
                var lstOfFields = new List <string>();

                if (fields != null)
                {
                    lstOfFields = fields.ToLower().Split(',').ToList();
                }

                var expenses = _repository.GetExpenses(expenseGroupId);

                if (expenses == null)
                {
                    return(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,
                    fields = fields,
                    sort   = sort
                }) : "";
                var nextLink = page < totalPages?urlHelper.Link("ExpensesForGroup",
                                                                new
                {
                    page   = page + 1, pageSize = pageSize, expenseGroupId = expenseGroupId,
                    fields = fields,
                    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.CreateDataShapedObject(exp, lstOfFields));

                return(Ok(expensesResult));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Example #6
0
        public IHttpActionResult Get(int expenseGroupId, string fields = null, string sort = "date"
            , int page = 1, int pageSize = maxPageSize)
        {
            try
            {

                List<string> lstOfFields = new List<string>();

                if (fields != null)
                {
                    lstOfFields = fields.ToLower().Split(',').ToList();
                }
                //get expenseGroup
                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,
                        fields = fields,
                        sort = sort
                    }) : "";
                var nextLink = page < totalPages ? urlHelper.Link("ExpensesForGroup",
                    new
                    {
                        page = page + 1,
                        pageSize = pageSize,
                        expenseGroupId = expenseGroupId,
                        fields = fields,
                        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) //sorting
                    .Skip(pageSize * (page - 1))
                    .Take(pageSize)
                    .ToList()
                    .Select(exp => _expenseFactory.CreateDataShapedObject(exp, lstOfFields)); //field level data shping

                return Ok(expensesResult);

            }
            catch (Exception)
            {
                return InternalServerError();
            }
        }