private string CreateCoachInfoUri(CoachInfoResourceParameters coachInfoResourceParameters, UriType uriType, string routeName) { switch (uriType) { case UriType.PreviousPage: return(Url.Link(routeName, new { pageNumber = coachInfoResourceParameters.PageNumber - 1, coachInfoResourceParameters.PageSize, coachInfoResourceParameters.SearchQuery, coachInfoResourceParameters.OrderBy, coachInfoResourceParameters.Fields })); case UriType.NextPage: return(Url.Link(routeName, new { pageNumber = coachInfoResourceParameters.PageNumber + 1, coachInfoResourceParameters.PageSize, searchQuery = coachInfoResourceParameters.SearchQuery, coachInfoResourceParameters.OrderBy, coachInfoResourceParameters.Fields })); default: return(Url.Link(routeName, new { coachInfoResourceParameters.PageNumber, coachInfoResourceParameters.PageSize, coachInfoResourceParameters.SearchQuery, coachInfoResourceParameters.OrderBy, coachInfoResourceParameters.Fields })); } }
public IActionResult GetCoachInfos([FromQuery] CoachInfoResourceParameters coachInfoReposrceParameters) { if (!_propertyMapping.ValidMappingExist <CoachInfoOutputDto, CoachInfo>(coachInfoReposrceParameters.OrderBy)) { return(BadRequest()); } if (!_propertyValidation.HasValidProperties <CoachInfoOutputDto>(coachInfoReposrceParameters.Fields)) { return(BadRequest()); } var coachInfoFromRepo = _coachInfosRepository.GetCoachInfos(coachInfoReposrceParameters); var previousPageLink = coachInfoFromRepo.HasPrevious ? CreateCoachInfoUri(coachInfoReposrceParameters, UriType.PreviousPage, "GetCoachInfos") : null; var nextPageLink = coachInfoFromRepo.HasNext ? CreateCoachInfoUri(coachInfoReposrceParameters, UriType.NextPage, "GetCoachInfos") : null; var metaData = new { totalCount = coachInfoFromRepo.TotalCount, pageSize = coachInfoFromRepo.PageSize, currentPage = coachInfoFromRepo.CurrentPage, totalPages = coachInfoFromRepo.TotalPages, previousPageLink, nextPageLink, }; Response.Headers.Add("Pagination", JsonSerializer.Serialize(metaData)); return(Ok(_mapper.Map <IEnumerable <CoachInfoOutputDto> >(coachInfoFromRepo).ShapeData(coachInfoReposrceParameters.Fields))); }
public PageList <CoachInfo> GetCoachInfos(CoachInfoResourceParameters coachInfoResourceParameters) { if (coachInfoResourceParameters == null) { throw new ArgumentNullException(nameof(coachInfoResourceParameters)); } var collection = _context.CoachInfos.Include(c => c.Author) as IQueryable <CoachInfo>; if (!string.IsNullOrWhiteSpace(coachInfoResourceParameters.SearchQuery)) { string searchinQuery = coachInfoResourceParameters.SearchQuery.Trim().ToLower(); collection = collection.Where(c => c.Author.Name.ToLower().Contains(searchinQuery) || c.Author.Email.ToLower().Contains(searchinQuery)); // Do we need includes to do this? } if (!string.IsNullOrWhiteSpace(coachInfoResourceParameters.OrderBy)) { var postPropertyMappingDictionary = _propertyMapping.GetPropertyMapping <CoachInfoOutputDto, CoachInfo>(); collection = collection.ApplySort(coachInfoResourceParameters.OrderBy, postPropertyMappingDictionary); } return(PageList <CoachInfo> .Create(collection, coachInfoResourceParameters.PageNumber, coachInfoResourceParameters.PageSize)); }