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