// GET: api/TransportRule protected virtual ActionResult <IEnumerable <TVM> > Get( ApiRequestParams requestParams ) { try { // Some controllers return all records in DB, e.g. Schedule Rules if (requestParams.AllRecords) { return(Ok(new { data = service.GetAll() .Select(e => map.Map <TD, TVM>(e)) })); } var result = service.GetAll() .Skip(requestParams.Skip) .Take(requestParams.pageSize) .Select(e => map.Map <TD, TVM>(e)) .AsEnumerable(); //!!TODO Implement pagination and filtering var paginationMetaData = new PaginationMetaData(); return(Ok(new { metaData = paginationMetaData, data = result })); } catch (Exception ex) { return(StatusCode(500, ex)); } }
public async Task <GenericResponse <ShapedDataWithLinks> > GetRefreshTokens(RefreshTokenResourceParameter resourceParameter, string mediaType) { try { if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parsedMediaType)) { return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong media type")); } var refreshTokens = await this.dataService.RefreshTokens.FindAllAsync(resourceParameter); if (refreshTokens.Count == 0) { return(GenericResponseBuilder.Success <ShapedDataWithLinks>(null)); } var paginationMetaData = new PaginationMetaData { TotalCount = refreshTokens.TotalCount, PageSize = refreshTokens.PageSize, CurrentPage = refreshTokens.CurrentPage, TotalPages = refreshTokens.TotalPages }; var links = CreateLinksForRefreshTokens(resourceParameter, refreshTokens.HasNext, refreshTokens.HasPrevious); var shapedRefreshTokens = this.mapper .Map <IEnumerable <RefreshTokenDto> >(refreshTokens) .ShapeData(resourceParameter.Fields); var includeLinks = parsedMediaType.SubTypeWithoutSuffix .EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase); var refreshTokensToReturnWithLinks = shapedRefreshTokens.Select(token => { var tokenAsDictionary = token as IDictionary <string, object>; if (includeLinks) { var userLinks = CreateLinksForRefreshToken((Guid)tokenAsDictionary["Id"], resourceParameter.Fields); tokenAsDictionary.Add("links", userLinks); } return(tokenAsDictionary); }); var refreshTokensToReturn = new ShapedDataWithLinks() { Value = refreshTokensToReturnWithLinks, Links = links, PaginationMetaData = paginationMetaData }; return(GenericResponseBuilder.Success <ShapedDataWithLinks>(refreshTokensToReturn)); } catch (Exception ex) { logger.LogError(string.Format("Error in BLL - GetRefreshTokens. {0}", ex.Message)); return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, ex.Message.ToString())); } }
public async Task <ActionResult <IEnumerable <AuthorOutputModel> > > GetAuthors(int pageNumber, int pageSize) { var authorsFromDb = await _authorRepository.GetPaginatedListAsync(pageSize, pageNumber); var nextPageLink = authorsFromDb.HasNext ? GeneratePaginationLinks(LinkType.Next, pageNumber, pageSize) : null; var previousPageLink = authorsFromDb.HasPrevious ? GeneratePaginationLinks(LinkType.Previous, pageNumber, pageSize) : null; var currentPageLink = GeneratePaginationLinks(LinkType.Current, pageNumber, pageSize); var paginationMetadata = new PaginationMetaData() { CurrentPageLink = currentPageLink, NextPageLink = nextPageLink, PreviousPageLink = previousPageLink, TotalCount = authorsFromDb.TotalCount, TotalPages = authorsFromDb.TotalPages }; Response.Headers.Add("PaginationMetadata", JsonSerializer.Serialize(paginationMetadata)); return(Ok(_mapper.Map <IEnumerable <AuthorOutputModel> >(authorsFromDb))); }
public IActionResult GetAuthors([FromQuery] AuthorsResourceParameters authorsResourceParameters) { /* Slow and errorprone method * var authors = new List<AuthorDto>(); * foreach(var auth in repoAuthors) * { * authors.Add(new AuthorDto() * { * Id = auth.Id, * Name = $"{auth.FirstName} {auth.LastName}", * Genre = auth.Genre, * Age = auth.DateOfBirth.GetCurentAge(), * }); * } */ //Exception Handled in Startup /* * try * { * throw new Exception("Test"); * * var authors = AutoMapper.Mapper.Map<IEnumerable<AuthorDto>>(repoAuthors); * return new JsonResult(authors); * } * catch (Exception ex) * { * return StatusCode(500, "An unexpected fault happend. Please try again later!"); * } */ if (!_propertyMappingService.ValidMappingExistsFor <AuthorDto, Author>(authorsResourceParameters.OrderBy)) { return(BadRequest()); } var repoAuthors = _libraryRepository.GetAuthors(authorsResourceParameters); var previousPageLink = repoAuthors.HasPrevious ? CreateAuthorsResourceUrl(authorsResourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = repoAuthors.HasNext ? CreateAuthorsResourceUrl(authorsResourceParameters, ResourceUriType.NextPage) : null; var paginationMetaData = new PaginationMetaData(repoAuthors, previousPageLink, nextPageLink); Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetaData)); var authors = AutoMapper.Mapper.Map <IEnumerable <AuthorDto> >(repoAuthors); return(new JsonResult(authors)); }
public async Task <GenericResponse <ShapedDataWithLinks> > GetApplicationClients(ApplicationClientResourceParameter resourceParameter, string mediaType) { try { if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parsedMediaType)) { return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong media type")); } if (!propertyMappingService.ValidMappingExistsFor <ApplicationClientDto, ApplicationClient>(resourceParameter.OrderBy)) { return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong OrderBy entered")); } if (!propertyCheckerService.TypeHasProperties <ApplicationClientDto>(resourceParameter.Fields, true)) { return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, "Wrong fields entered")); } var applicationClients = await this.dataService.ApplicationClients.FindAllAsync(resourceParameter); if (applicationClients.Count == 0) { return(GenericResponseBuilder.Success <ShapedDataWithLinks>(null)); } var paginationMetaData = new PaginationMetaData() { TotalCount = applicationClients.TotalCount, PageSize = applicationClients.PageSize, CurrentPage = applicationClients.CurrentPage, TotalPages = applicationClients.TotalPages }; var links = CreateLinksForApplicationClients(resourceParameter, applicationClients.HasNext, applicationClients.HasPrevious); var shapedClientsToReturn = this.mapper .Map <IEnumerable <ApplicationClientDto> >(applicationClients) .ShapeData(resourceParameter.Fields); var includeLinks = parsedMediaType.SubTypeWithoutSuffix .EndsWith("hateoas", StringComparison.InvariantCultureIgnoreCase); var shapedClientsToReturnWithLinks = shapedClientsToReturn.Select(client => { var userAsDictionary = client as IDictionary <string, object>; if (includeLinks) { var userLinks = CreateLinksForApplicationClient((Guid)userAsDictionary["Id"], resourceParameter.Fields); userAsDictionary.Add("links", userLinks); } return(userAsDictionary); }); var applicationClientsToReturn = new ShapedDataWithLinks() { Value = shapedClientsToReturnWithLinks, Links = links, PaginationMetaData = paginationMetaData }; return(GenericResponseBuilder.Success <ShapedDataWithLinks>(applicationClientsToReturn)); } catch (Exception ex) { logger.LogError(string.Format("Error in BLL - GetApplicationClients. {0}", ex.Message)); return(GenericResponseBuilder.NoSuccess <ShapedDataWithLinks>(null, ex.Message.ToString())); } }