public async Task <IHttpActionResult> GetUsersByPhrase(string phrase, int pageNo = 1, int pageSize = 5, string sort = "lastname", string role = "Customer")
        {
            List <ApplicationUser> users;
            PageLinkBuilder        linkBuilder;

            try
            {
                var usersCount = await _unitOfWork.UserRepository.GetByPhraseAndRoleCountAsync(phrase, role);

                users = await _unitOfWork.UserRepository.GetUserByPhraseAndRole(sort, pageNo, pageSize, phrase, role);

                linkBuilder = new PageLinkBuilder(Url, "SearchUsersRoute", new { sort = sort, role = role, phrase = phrase }, pageNo, pageSize, usersCount);
            }
            catch (ItemNotFoundException e)
            {
                return(NotFound());
            }
            catch (ParseException e)
            {
                ModelState.AddModelError("sort", "Incorrect parameter!");
                return(BadRequest(ModelState));
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(InternalServerError());
            }
            var result = _mapper.Map <List <UserInfoBindingModel> >(users);

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

            return(Ok(result));
        }
Exemplo n.º 2
0
        public IHttpActionResult GetPageLinks(int pageNo = 1, int pageSize = 50)
        {
            // Determine the number of records to skip
            int skip = (pageNo - 1) * pageSize;

            // Get total number of records
            int total = _dbContext.Customers.Count();

            // Select the customers based on paging parameters
            var customers = _dbContext.Customers
                            .OrderBy(c => c.Id)
                            .Skip(skip)
                            .Take(pageSize)
                            .ToList();

            // Get the page links
            var linkBuilder = new PageLinkBuilder(Url, "GetPageLinks", null, pageNo, pageSize, total);

            // Return the list of customers
            return(Ok(new
            {
                Data = customers,
                Paging = new
                {
                    First = linkBuilder.FirstPage,
                    Previous = linkBuilder.PreviousPage,
                    Next = linkBuilder.NextPage,
                    Last = linkBuilder.LastPage
                }
            }));
        }
Exemplo n.º 3
0
 public void Paginate(PageLinkBuilder linkBuilder)
 {
     Paging = new
     {
         First    = linkBuilder.FirstPage.ToString(),
         Previous = linkBuilder.PreviousPage == null ? null : linkBuilder.PreviousPage.ToString(),
         Next     = linkBuilder.NextPage == null ? null : linkBuilder.NextPage.ToString(),
         Last     = linkBuilder.LastPage.ToString(),
     };
 }
        /// <summary>
        ///  Ermittelt alle API-User
        /// </summary>
        /// <param name="predicate"></param>
        /// <param name="pageNo"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        private async Task <IHttpActionResult> GetAllApiUsersHelper(Func <APIUser, bool> predicate, int pageNo = 1, int pageSize = 10)
        {
            IHandleJobs repo     = new JobRepository(_username);
            var         dbResult = await repo.GetAllApiUsers(predicate);

            if (!dbResult.Success)
            {
                return(Content(HttpStatusCode.BadRequest, dbResult.Message));
            }

            int skip  = (pageNo - 1) * pageSize;
            int total = dbResult.Data.Count;

            dbResult.Data = dbResult.Data.Skip(skip).Take(pageSize).ToList();

            var result = dbResult.Data.Select(user => new
            {
                user.Username,
                user.IsAdmin,
                user.CreatedUser,
                user.CreatedDate,
                user.UniqueId,
                user.Id,
                _links = new Link()
                {
                    _actions = new List <Action>()
                    {
                        !user.IsAdmin ? CreateActionLink <AdminController>(Names.SetApiUserAsAdmin, c => c.SetApiUserAsAdmin(user.Username), Names.SetApiUserAsAdmin):null,
                        user.IsAdmin ? CreateActionLink <AdminController>(Names.RevokeAdminFromApiUser, c => c.RevokeAdminFromApiUser(user.Username), Names.RevokeAdminFromApiUser) : null,
                        CreateActionLink <AdminController>(Names.DeleteApiUser, c => c.DeleteApiUser(user.Username), Names.DeleteApiUser),
                    }
                }
            }).ToList();

            result.ForEach(c => c._links._actions.RemoveAll(d => d == null));
            var linkBuilderResult = new PageLinkBuilder(Url, Names.GetAllApiUsers, null, pageNo, pageSize, total);

            return(Ok(new JobResult <object>()
            {
                SemasResult = new SemasResult <object>(true)
                {
                    Data = result
                },
                _paging = new
                {
                    First = linkBuilderResult.FirstPage,
                    Previous = linkBuilderResult.PreviousPage,
                    Next = linkBuilderResult.NextPage,
                    Last = linkBuilderResult.LastPage,
                    TotalItems = total,
                    TotalPageCount = linkBuilderResult.TotalPageCount
                }
            }));
        }
Exemplo n.º 5
0
        public void PageLink_Constructor_GenerateURLWithBaseUrl()
        {
            // arrange
            string url       = "http://www.google.com";
            string urlreturn = "http://www.google.com?pageNumber=3";

            // act
            PageLink link = PageLinkBuilder.Build(url, 3);

            // assert
            Assert.Equal(urlreturn, link.Url);
        }
Exemplo n.º 6
0
        public void PageLink_Constructor_GenerateURLWithQueryString()
        {
            // arrange
            string url       = "?test=123";
            string urlreturn = "?test=123&pageNumber=3";

            // act
            PageLink link = PageLinkBuilder.Build(url, 3);

            // assert
            Assert.Equal(urlreturn, link.Url);
        }
Exemplo n.º 7
0
        public async Task <IHttpActionResult> ErmittleAlleJobs(int pageNo = 1, int pageSize = 10)
        {
            try
            {
                IHandleJobs repo   = new JobRepository(_username);
                var         result = await repo.GetAllJobs(c => !c.IsDeleted);

                int skip  = (pageNo - 1) * pageSize;
                int total = result.Data.Count;

                result.Data = result.Data.Skip(skip).Take(pageSize).ToList();

                foreach (var job in result.Data)
                {
                    job._links = new Link()
                    {
                        _actions = new List <Action>()
                        {
                            CreateActionLink <JobDetailController>(Names.JobDetails, c => c.JobDetails(job.UniqueId), Names.JobDetails),
                            CreateActionLink <JobDetailController>(Names.LoescheJob, c => c.LoescheJob(job.UniqueId), Names.LoescheJob),
                            CreateActionLink <JobDetailController>(Names.SetzeJobInWork, c => c.SetzeJobInWork(job.UniqueId), Names.SetzeJobInWork),
                            CreateActionLink <JobDetailController>(Names.SetzeJobDone, c => c.SetzeJobDone(job.UniqueId), Names.SetzeJobDone),
                            CreateActionLink <JobDetailController>(Names.SetzeJobIsCanceled, c => c.SetzeJobIsCanceled(job.UniqueId), Names.SetzeJobIsCanceled),
                        }
                    };
                }

                var linkBuilderResult = new PageLinkBuilder(Url, Names.ErmittleAlleJobs, null, pageNo, pageSize, total);
                return(Ok(new JobResult <List <Job> >()
                {
                    SemasResult = result,
                    _links = GetJobRootLinks(),
                    _paging = new
                    {
                        First = linkBuilderResult.FirstPage,
                        Previous = linkBuilderResult.PreviousPage,
                        Next = linkBuilderResult.NextPage,
                        Last = linkBuilderResult.LastPage,
                        TotalItems = total,
                        TotalPageCount = linkBuilderResult.TotalPageCount
                    }
                }));
            }
            catch (Exception e)
            {
                return(Content(HttpStatusCode.BadRequest, e.Message));
            }
        }
Exemplo n.º 8
0
        public HttpResponseMessage GetPageLinkHeaders(int pageNo = 1, int pageSize = 50)
        {
            // Determine the number of records to skip
            int skip = (pageNo - 1) * pageSize;

            // Get total number of records
            int total = _dbContext.Customers.Count();

            // Select the customers based on paging parameters
            var customers = _dbContext.Customers
                            .OrderBy(c => c.Id)
                            .Skip(skip)
                            .Take(pageSize)
                            .ToList();

            // Get the page links
            var linkBuilder = new PageLinkBuilder(Url, "GetPageLinkHeaders", null, pageNo, pageSize, total);

            // Create the response
            var response = Request.CreateResponse(HttpStatusCode.OK, customers);

            // Build up the link header
            List <string> links = new List <string>();

            if (linkBuilder.FirstPage != null)
            {
                links.Add(string.Format(LinkHeaderTemplate, linkBuilder.FirstPage, "first"));
            }
            if (linkBuilder.PreviousPage != null)
            {
                links.Add(string.Format(LinkHeaderTemplate, linkBuilder.PreviousPage, "previous"));
            }
            if (linkBuilder.NextPage != null)
            {
                links.Add(string.Format(LinkHeaderTemplate, linkBuilder.NextPage, "next"));
            }
            if (linkBuilder.LastPage != null)
            {
                links.Add(string.Format(LinkHeaderTemplate, linkBuilder.LastPage, "last"));
            }

            // Set the page link header
            response.Headers.Add("Link", string.Join(", ", links));

            // Return the response
            return(response);
        }
Exemplo n.º 9
0
        public void Set_pageNo_2_should_build_all_urls()
        {
            pageLinkBuilder = new PageLinkBuilder(urlHelper, "GetWeatherByUserId", null, 2, 5, 15);

            Uri firstPageExpected    = new Uri("http://localhost/GetWeatherByUserId?pageNo=1&pageSize=5");
            Uri lastPageExpected     = new Uri("http://localhost/GetWeatherByUserId?pageNo=3&pageSize=5");
            Uri nextPageExpected     = new Uri("http://localhost/GetWeatherByUserId?pageNo=3&pageSize=5");
            Uri previousPageExpected = new Uri("http://localhost/GetWeatherByUserId?pageNo=1&pageSize=5");

            Uri firstPage    = pageLinkBuilder.FirstPage;
            Uri lastPage     = pageLinkBuilder.LastPage;
            Uri nextPage     = pageLinkBuilder.NextPage;
            Uri previousPase = pageLinkBuilder.PreviousPage;


            Assert.AreEqual(firstPageExpected, firstPage);
            Assert.AreEqual(lastPageExpected, lastPage);
            Assert.AreEqual(nextPageExpected, nextPage);
            Assert.AreEqual(previousPageExpected, previousPase);
        }
Exemplo n.º 10
0
        public async Task <IHttpActionResult> UserVisits(string email, int pageNo = 1, int pageSize = 5, string sort = "startDate")
        {
            if (!(User.IsInRole("Admin") || User.IsInRole("Hairdresser") || User.Identity.GetUserName() == email))
            {
                return(new ForbiddenActionResult());
            }

            List <Visit>    result      = null;
            PageLinkBuilder linkBuilder = null;

            try
            {
                var counter = await _unitOfWork.VisitRepository.VisitsCountAsync(email);

                result = await _unitOfWork.VisitRepository.GetByUserAsync(email, pageNo, pageSize, sort);

                linkBuilder = new PageLinkBuilder(Url, "UserVisitsRoute", new { sort = sort, email = email }, pageNo, pageSize, counter);
            }
            catch (ItemNotFoundException e)
            {
                return(NotFound());
            }
            catch (ParseException e)
            {
                ModelState.AddModelError("sort", e.Message);
                return(BadRequest(ModelState));
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(InternalServerError());
            }

            HttpContext.Current.Response.Headers.Add("X-Pagination",
                                                     Newtonsoft.Json.JsonConvert.SerializeObject(linkBuilder));
            var model = _mapper.Map <List <UserVisitInfoBindingModel> >(result);

            return(Ok(model));
        }
Exemplo n.º 11
0
        public IHttpActionResult GetList(int pageNo = 1, int pageSize = 50)
        {
            try
            {
                // Determine the number of itmes to skip
                int skip = (pageNo - 1) * pageSize;

                // Get total number of items
                int total = _repository.List.Count();

                // Select the items based on paging parameters
                var items = _repository.List
                            .OrderBy(c => c.Key)
                            .Skip(skip)
                            .Take(pageSize)
                            .ToList();

                // Get the page links
                var linkBuilder = new PageLinkBuilder(Url, "DefaultApi", null, pageNo, pageSize, total);

                // Return the list of items
                return(Ok(new
                {
                    Data = items,
                    Paging = new
                    {
                        First = linkBuilder.FirstPage,
                        Previous = linkBuilder.PreviousPage,
                        Next = linkBuilder.NextPage,
                        Last = linkBuilder.LastPage
                    }
                }));
            }
            catch (System.Exception e)
            {
                //a log here may be usefull
                return(InternalServerError(e));
            }
        }
Exemplo n.º 12
0
        public async Task <IHttpActionResult> Customers(string sort = "lastname", int pageNo = 1, int pageSize = 5)
        {
            int customersCount;
            int maximumPageSize = 50;

            pageSize = pageSize > maximumPageSize ? maximumPageSize : pageSize;

            List <CustomerInfoBindingModel> result;
            PageLinkBuilder linkBuilder = null;

            try
            {
                var customers = await _unitOfWork.UserRepository.GetCustomersAsync(sort, pageNo, pageSize);

                result = _mapper.Map <List <Customer>, List <CustomerInfoBindingModel> >(customers);
                var userManager = System.Web.HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>();
                customersCount = await _unitOfWork.UserRepository.GetAllCountAsync("customer");

                linkBuilder = new PageLinkBuilder(Url, "CustomersRoute", new { sort = sort }, pageNo, pageSize, customersCount);
            }
            catch (ItemNotFoundException e)
            {
                return(NotFound());
            }
            catch (ParseException e)
            {
                ModelState.AddModelError("sort", "Incorrect parameter!");
                return(BadRequest(ModelState));
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(InternalServerError());
            }
            HttpContext.Current.Response.Headers.Add("X-Pagination",
                                                     Newtonsoft.Json.JsonConvert.SerializeObject(linkBuilder));
            return(Ok(result));
        }
Exemplo n.º 13
0
        public virtual async Task <ActionResult <IEnumerable <dynamic> > > GetAllAsync([FromQuery] string fields, [FromQuery] string range, [FromQuery] string asc, [FromQuery] string desc)
        {
            IQueryCollection requestQuery = Request.Query;

            var query = _context.Set <TModel>().AsQueryable();

            // TRIS
            if (!string.IsNullOrWhiteSpace(asc) || !string.IsNullOrWhiteSpace(desc))
            {
                query = query.OrderByDynamic(asc, desc);
            }

            // FILTRES
            if (requestQuery != null && requestQuery.Count() > 0)
            {
                query = query.WhereDynamic(requestQuery);
            }

            // PAGINATION
            if (!string.IsNullOrWhiteSpace(range))
            {
                var tab = range.Split('-');

                int total = query.Count();

                query = query.TakePageResult(Int32.Parse(tab[0]), Int32.Parse(tab[1]));

                var linkBuilder = new PageLinkBuilder(Url, "", null, Int32.Parse(tab[0]), Int32.Parse(tab[1]), total);

                List <string> links = new List <string>();
                if (linkBuilder.FirstPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.FirstPage, "first"));
                }
                if (linkBuilder.PreviousPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.PreviousPage, "prev"));
                }
                if (linkBuilder.NextPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.NextPage, "next"));
                }
                if (linkBuilder.LastPage != null)
                {
                    links.Add(string.Format(LinkHeaderTemplate, linkBuilder.LastPage, "last"));
                }
                Response.Headers.Add("Link", string.Join(", ", links));

                Response.Headers.Add("Content-Range", linkBuilder.GetContentRange());
                Response.Headers.Add("Accept-Ranges", typeof(TModel).Name + " " + total);
            }

            // RENDU PARTIEL
            if (!string.IsNullOrWhiteSpace(fields))
            {
                var tab = fields.Split(',');
                query = query.SelectModel(tab);
                var results = await query.ToListAsync();

                return(Ok(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList()));
            }
            else
            {
                return(Ok(ToJsonList(await query.ToListAsync())));
            }
        }