Beispiel #1
0
        public async Task <ActionResult <IEnumerable <PaperBriefDetailDto> > > GetUserPublicPapers(
            Guid userId,
            [FromQuery] PaperDtoParameters parameters)
        {
            if (!await userService.UserExistsAsync(userId))
            {
                return(NotFound());
            }

            var papers = await userService.GetUserPublicPaperAsync(userId, parameters);

            if (papers == null)
            {
                return(NoContent());
            }
            var previousLink = papers.HasPrevious ?
                               CreatePapersResourceUri(nameof(GetUserPublicPapers), parameters, ResourceUriType.PreviousPage) : null;
            var nextLink = papers.HasNext ?
                           CreatePapersResourceUri(nameof(GetUserPublicPapers), parameters, ResourceUriType.NextPage) : null;

            var paginationMetaData = new
            {
                currentPage = papers.CurrentPage,
                pageSize    = papers.PageSize,
                totalPages  = papers.TotalPages,
                totalCount  = papers.TotalCount,
                previousLink,
                nextLink
            };

            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetaData, new JsonSerializerOptions
            {
                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
            }));

            var paperDtos = mapper.Map <IEnumerable <PaperBriefDetailDto> >(papers);
            var shapeData = paperDtos.ShapeDate(parameters.fields);

            var links = CreateLinkForUserHome(nameof(GetUserPublicPapers), parameters, papers.HasPrevious, papers.HasNext);

            var shapedWithUserPaper = shapeData.Select(u =>
            {
                var paperDic   = u as IDictionary <string, object>;
                var paperLinks = CreateLinkForUserHome(nameof(GetUserPublicPapers), (Guid)paperDic["UserId"], (Guid)paperDic["Id"], null);

                paperDic.Add("links", paperLinks);

                return(paperDic);
            });

            var collectionPaper = new
            {
                value = shapedWithUserPaper,
                links
            };

            return(Ok(collectionPaper));
        }
Beispiel #2
0
        public async Task <PagedList <Paper> > GetUserPublicPaperAsync(Guid userId, PaperDtoParameters parameters)
        {
            if (userId == Guid.Empty)
            {
                throw new ArgumentNullException(nameof(userId));
            }

            /*
             * if (parameters == null)
             * {
             *  return await context.papers
             *  .Where(x => x.UserId == userId && x.Auth == true)
             *  .OrderBy(x => x.StartTime)
             *  .ToListAsync();
             * }*/

            var items = context.papers as IQueryable <Paper>;

            items = items.Where(x => x.UserId == userId && x.Auth == true);

            if (!string.IsNullOrWhiteSpace(parameters.Title))
            {
                parameters.Title = parameters.Title.Trim();
                items            = items.Where(x => x.Title.Contains(parameters.Title));
            }

            if (!string.IsNullOrWhiteSpace(parameters.Lable))
            {
                parameters.Lable = parameters.Lable.Trim();
                items            = items.Where(x => x.Lable.Contains(parameters.Lable));
            }

            if (!string.IsNullOrWhiteSpace(parameters.SearchTerm))
            {
                parameters.SearchTerm = parameters.SearchTerm.Trim();
                items = items.Where(x => x.Title.Contains(parameters.SearchTerm) ||
                                    x.Description.Contains(parameters.SearchTerm) ||
                                    x.Lable.Contains(parameters.SearchTerm));
            }
            //Get Mapping relations
            var mappingDictionary = propertyMappingService.GetPropertyMapping <PaperDto, Paper>();

            //Order By
            items = items.ApplySort(parameters.OrderBy, mappingDictionary);

            var returnItems = await PagedList <Paper> .CreateAsync(items, parameters.PageNumber, parameters.PageSize);

            //Take the Data From DataBase
            foreach (var paper in returnItems)
            {
                paper.Author = await context.users
                               .Where(x => x.Id == paper.UserId)
                               .FirstOrDefaultAsync();
            }

            return(returnItems);
        }
        public async Task <ActionResult <IEnumerable <PaperBriefDetailDto> > > GetPublicPapersForUser(
            Guid userId,
            [FromQuery] PaperDtoParameters parameters)
        {
            if (!await userService.UserExistsAsync(userId))
            {
                return(NotFound());
            }

            var papers = await userService.GetUserPublicPaperAsync(userId, parameters);

            var paperDtos = mapper.Map <IEnumerable <PaperBriefDetailDto> >(papers);

            return(Ok(paperDtos));
        }
Beispiel #4
0
        private string CreatePapersResourceUri(string routeName, PaperDtoParameters parameters, ResourceUriType type)
        {
            switch (type)
            {
            case ResourceUriType.PreviousPage:
                return(Url.Link(routeName, new
                {
                    orderBy = parameters.OrderBy,
                    pageNumber = parameters.PageNumber - 1,
                    pageSize = parameters.PageSize,
                    title = parameters.Title,
                    lable = parameters.Lable,
                    searchTerm = parameters.SearchTerm,
                }));

            case ResourceUriType.NextPage:
                return(Url.Link(routeName, new
                {
                    orderBy = parameters.OrderBy,
                    pageNumber = parameters.PageNumber + 1,
                    pageSize = parameters.PageSize,
                    title = parameters.Title,
                    lable = parameters.Lable,
                    searchTerm = parameters.SearchTerm,
                }));

            default:
                return(Url.Link(routeName, new
                {
                    orderBy = parameters.OrderBy,
                    pageNumber = parameters.PageNumber,
                    pageSize = parameters.PageSize,
                    title = parameters.Title,
                    lable = parameters.Lable,
                    searchTerm = parameters.SearchTerm,
                }));
            }
        }
Beispiel #5
0
        private IEnumerable <LinkDto> CreateLinkForUserHome(string routeName, PaperDtoParameters parameters, bool hasPrevious, bool hasNext)
        {
            List <LinkDto> links = new List <LinkDto>();

            links.Add(new LinkDto(CreatePapersResourceUri(routeName, parameters, ResourceUriType.CurrentPage),
                                  "self",
                                  "GET"));

            if (hasPrevious)
            {
                links.Add(new LinkDto(CreatePapersResourceUri(routeName, parameters, ResourceUriType.PreviousPage),
                                      "perviousPage",
                                      "GET"));
            }

            if (hasNext)
            {
                links.Add(new LinkDto(CreatePapersResourceUri(routeName, parameters, ResourceUriType.NextPage),
                                      "nextPage",
                                      "GET"));
            }

            return(links);
        }
Beispiel #6
0
        public async Task <ActionResult <IEnumerable <PaperDto> > > GetPrivatePapersForUserList(Guid userId,
                                                                                                [FromRoute]
                                                                                                [ModelBinder(BinderType = typeof(ArrayModelBinder))]
                                                                                                IEnumerable <Guid> paperIds,
                                                                                                [FromQuery] PaperDtoParameters parameters = null)
        {
            if (!await userService.UserExistsAsync(userId))
            {
                return(NotFound());
            }
            if (paperIds == null)
            {
                var papers = await userService.GetUserPrivatePapersAsync(userId, parameters);

                var paperDtos = mapper.Map <IEnumerable <PaperBriefDetailDto> >(papers);

                return(Ok(paperDtos));
            }

            var entities = await userService.GetUserPrivatePapersAsync(userId, paperIds);

            if (entities.Count() != paperIds.Count())
            {
                return(NotFound());
            }

            var returnDto = mapper.Map <IEnumerable <PaperBriefDetailDto> >(entities);

            return(Ok(returnDto));
        }
        public async Task <IActionResult> GetBriefPapers([FromQuery] PaperDtoParameters paperDtoParameters)
        {
            if (!string.IsNullOrWhiteSpace(paperDtoParameters.fields))
            {
                var fields = paperDtoParameters.fields.Split(",");
                if (!fields.Contains("Id") && !fields.Contains("userId"))
                {
                    return(UnprocessableEntity());
                }
            }

            if (!propertyMappingService.ValidMappingExists <PaperDto, Paper>(paperDtoParameters.OrderBy))
            {
                return(BadRequest());
            }
            if (!propertyCheckerService.TypeHasProperties <PaperDto>(paperDtoParameters.fields))
            {
                return(BadRequest());
            }
            var papers = await paperService.GetPapersAsync(paperDtoParameters);

            var previousLink = papers.HasPrevious ?
                               CreatePapersResourceUri(paperDtoParameters, ResourceUriType.PreviousPage) : null;
            var nextLink = papers.HasNext ?
                           CreatePapersResourceUri(paperDtoParameters, ResourceUriType.NextPage) : null;

            var paginationMetaData = new
            {
                currentPage = papers.CurrentPage,
                pageSize    = papers.PageSize,
                totalPages  = papers.TotalPages,
                totalCount  = papers.TotalCount,
                previousLink,
                nextLink
            };

            Response.Headers.Add("X-Pagination", JsonSerializer.Serialize(paginationMetaData, new JsonSerializerOptions
            {
                Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
            }));

            var papersDto = mapper.Map <IEnumerable <PaperBriefDetailDto> >(papers);
            var shapeData = papersDto.ShapeDate(paperDtoParameters.fields);

            var links = CreateLinkForHome(paperDtoParameters, papers.HasPrevious, papers.HasNext);


            var shapedWithPapers = shapeData.Select(p =>
            {
                var paperDic = p as IDictionary <string, object>;

                var paperLinks = CreateLinkForHome((Guid)paperDic["UserId"], (Guid)paperDic["Id"], null);

                paperDic.Add("links", paperLinks);

                return(paperDic);
            });

            var collectionPaper = new
            {
                value = shapedWithPapers,
                links
            };

            return(Ok(collectionPaper));
        }