Example #1
0
        public IHttpActionResult Get(string fields = null,
                                     string sort   = "id", string status = null, string userId = null,
                                     int page      = 1, int pageSize     = maxPageSize)
        {
            try
            {
                System.Security.Claims.Claim iss = null, sub = null;
                var identity = this.User.Identity as ClaimsIdentity;

                if (identity != null)
                {
                    iss = identity.FindFirst("iss");
                    sub = identity.FindFirst("sub");
                }

                // set the user id to this key
                if (iss != null && sub != null)
                {
                    userId = iss.Value + "_" + sub.Value;
                }
                else
                {
                    // if there's no unique key, we shouldn't be able to continue
                    return(StatusCode(HttpStatusCode.Forbidden));
                }


                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 ex)
            {
                return(InternalServerError());
            }
        }
        public IHttpActionResult Get(string sort   = "id", string status = null, string userId = null,
                                     string fields = null,
                                     int page      = 1, int pageSize = maxPageSize)
        {
            try
            {
                bool includeExpenses = false;
                var  lstOfFields     = new List <string>();

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

                //get expensesgroups from repository
                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
                })
                    : "";

                // omg anonymous object what is this javascript?
                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(Ok(expenseGroups
                          .Skip(pageSize * (page - 1))
                          .Take(pageSize)
                          .ToList()
                          .Select(eg => _expenseGroupFactory.CreateDataShapedObject(eg, lstOfFields))));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
        public IHttpActionResult Get(string sort = "id", string status = null, string userId = null, string fields = null, int page = 1, int pageSize = 5)
        {
            try
            {
                bool includeExpenses = false;
                var  listOfFields    = new List <string>();
                if (!string.IsNullOrEmpty(fields))
                {
                    listOfFields = fields.ToLower().Split(',').ToList();
                }

                includeExpenses = listOfFields.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 <ExpenseGroup> expenseGroups = null;
                if (includeExpenses)
                {
                    expenseGroups = _expenseTrackerRepository.GetExpenseGroupsWithExpenses();
                }
                else
                {
                    expenseGroups = _expenseTrackerRepository.GetExpenseGroups();
                }

                expenseGroups = expenseGroups.ApplySort(sort)
                                .Where(eg => (statusId == -1 || eg.ExpenseGroupStatusId == statusId))
                                .Where(eg => (userId == null || eg.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 > 1 ? 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(eg => _expenseGroupFactory.CreateDataShapedObject(eg, listOfFields))));
            }
            catch (Exception ex)
            {
                return(InternalServerError());
            }
        }
Example #4
0
        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>();

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

                // restrict pageSize
                if (pageSize > maxPageSize)
                {
                    pageSize = maxPageSize;
                }

                // calculate data for metadata
                var totalCount = expenseGroups.Count();
                var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);

                // creates new links from current route
                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
                }) : "";

                // Anonymous type, provides a convenient way to encapsulate a set of read-only properties into a single object
                // without having to explicitly define a type first
                var paginationHeader = new
                {
                    currentPage      = page,
                    pageSize         = pageSize,
                    totalCount       = totalCount,
                    totalPages       = totalPages,
                    previousPageLink = prevLink,
                    nextPageLink     = nextLink
                };

                // Add the paginationHeader to the current response headers
                HttpContext.Current.Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader));

                // return statuscode 200 containing the list of ExpenseGroups, mapped using the factory to their DTO models
                return(Ok(expenseGroups                     // already sorted and filtered
                          .Skip(pageSize * (page - 1))      // skip the pages we don't need
                          .Take(pageSize)                   // take the number of items a page contains
                          .ToList()
                          .Select(eg => _expenseGroupFactory.CreateDataShapedObject(eg, lstOfFields))));
            }
            catch (Exception)
            {
                // statuscode 500, for when the client can't help
                return(InternalServerError());
            }
        }
Example #5
0
        public IHttpActionResult Get(
            string sort   = "id",
            string status = null,
            string userId = null,
            string fields = "",
            int page      = 0,
            int pageSize  = 5
            )
        {
            try
            {
                bool includeExpenses = false;
                var  fieldList       = fields.ToLower().Split(',').Where(s => !string.IsNullOrEmpty(s)).ToList();

                if (fieldList != null)
                {
                    includeExpenses = fieldList.Any(f => f.Contains("expense"));
                }

                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
                                .Where(eg => (statusId == -1 || eg.ExpenseGroupStatusId == statusId))
                                .Where(eg => (userId == null || eg.UserId == userId))
                                .ApplySort(sort);

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

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

                var expenseGroupsResult = expenseGroups
                                          .Skip(pageSize * (page))
                                          .Take(pageSize)
                                          .ToList()
                                          .Select(eg => _expenseGroupFactory.CreateDataShapedObject(eg, fieldList));

                return(Ok(expenseGroupsResult));
            }
            catch (Exception e)
            {
                return(InternalServerError(e));
            }
        }
Example #6
0
        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)
                {
                    // get expensegroups from the repository
                    expenseGroups = _repository.GetExpenseGroupsWithExpenses();
                }
                else
                {
                    expenseGroups = _repository.GetExpenseGroups();
                }

                expenseGroups = expenseGroups.ApplySort(sort)
                                .Where(eg => (statusId == -1 || eg.ExpenseGroupStatusId == statusId)) // Filtering: Only displaying open expensegroups
                                .Where(eg => (userId == null || eg.UserId == userId));                // Filtering: Only displaying data for the user who is logged in

                // 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);                        // The UrlHelper allows us to easliy create a link from the route that's being used to access this action. We have to name the route which is why I named this route Name="ExpenseGroupsList"
                var prevLink  = page > 1 ? urlHelper.Link("ExpenseGroupsList", // Link to previous page
                                                          new                  // We need to pass in all the parameters that are passed in to this method because all the pages will use these parameters to determine what gets displayed.
                {
                    page     = page - 1,
                    pageSize = pageSize,
                    sort     = sort,
                    fields   = fields,
                    status   = status,
                    userId   = userId
                }) : "";
                var nextLink = page < totalPages?urlHelper.Link("ExpenseGroupsList",   // Link to next page
                                                                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
                };

                // Adding pagination information to Http "Header" collection
                HttpContext.Current.Response.Headers.Add("X-Pagination",
                                                         Newtonsoft.Json.JsonConvert.SerializeObject(paginationHeader));

                return(Ok(expenseGroups
                          .Skip(pageSize * (page - 1))
                          .Take(pageSize)
                          .ToList()
                          .Select(eg => _expenseGroupFactory.CreateDataShapedObject(eg, lstOfFields)))); // We want to send over the models from our DTO project. So we need to map these entities using the factory to their corresponding DTO models. This statement will return an expense DTO.
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Example #7
0
        public IHttpActionResult Get(string fields = null, string sort = "id", string status = null, string userId = null, int page = 1, int pageSize = MaxPageItems)
        {
            List <string> lstOfFields = new List <string>();

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

            //conversion of status to their (int)id value
            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;
                }
            }

            IEnumerable <ExpenseGroup> lstexpenseGroups = _repo.GetExpenseGroupsWithExpenses()
                                                          .Where(eg => (statusId == -1) || (eg.ExpenseGroupStatusId == statusId))
                                                          .ApplySort(sort);

            var totalCount = lstexpenseGroups.Count();
            var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);

            if (pageSize > MaxPageItems)
            {
                pageSize = MaxPageItems;
            }

            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", JsonConvert.SerializeObject(paginationHeader));

            var     config = new AutoMapperConfiguration().Configure();
            IMapper mapper = config.CreateMapper();
            var     dest   = mapper.Map <IEnumerable <ExpenseGroup>, IEnumerable <ExpenseGroupDTO> >(lstexpenseGroups);

            try
            {
                return(Ok(dest.Skip(pageSize * (page - 1)).Take(pageSize)));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }