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