Esempio n. 1
0
 // 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()));
            }
        }
Esempio n. 3
0
        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));
        }
Esempio n. 5
0
        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()));
            }
        }