Exemplo n.º 1
0
        private IDictionary <string, object> ShapeAndLinkSinglePost
            (PostOutputDto postToReturn, PostIdsSet idsSet)
        {
            var shapedPost = properties.ShapeSingleData(postToReturn);

            return(GetLinkedResource(shapedPost, idsSet));
        }
Exemplo n.º 2
0
        public IActionResult UpdatePost(Guid authorId, Guid postId, PostInputDto updatedPost,
                                        [FromHeader(Name = "Content-Type")] string mediaType)
        {
            if (IsUserIdNotEqualTo(authorId))
            {
                return(Unauthorized());
            }

            var idsSet       = new PostIdsSet(authorId, postId);
            var postFromRepo = blogRepository.GetPostForAuthor(authorId, postId);

            if (postFromRepo is null)
            {
                return(AddPost(idsSet, updatedPost, IncludeLinks(mediaType)));
            }

            mapper.Map(updatedPost, postFromRepo);
            blogRepository.SaveChanges();

            if (IncludeLinks(mediaType))
            {
                var mappedPost = mapper.Map <PostOutputDto>(postFromRepo);
                return(Ok(ShapeAndLinkSinglePost(mappedPost, idsSet)));
            }

            return(NoContent());
        }
Exemplo n.º 3
0
        public IActionResult AddPost(Guid authorId, PostInputDto newPost,
                                     [FromHeader(Name = "Content-Type")] string mediaType)
        {
            if (IsUserIdNotEqualTo(authorId))
            {
                return(Unauthorized());
            }

            var idsSet = new PostIdsSet(authorId);

            return(AddPost(idsSet, newPost, IncludeLinks(mediaType)));
        }
Exemplo n.º 4
0
        public IActionResult PartiallyUpdatePostForAuthor
            (Guid authorId, Guid postId, JsonPatchDocument <PostInputDto> patchDocument,
            [FromHeader(Name = "Content-Type")] string mediaType)
        {
            if (IsUserIdNotEqualTo(authorId))
            {
                return(Unauthorized());
            }

            if (blogRepository.AuthorNotExist(authorId))
            {
                return(NotFound());
            }

            var postFromRepo = blogRepository.GetPostForAuthor(authorId, postId);

            if (postFromRepo is null)
            {
                return(NotFound());
            }

            var postInputDto = mapper.Map <PostInputDto>(postFromRepo);

            patchDocument.ApplyTo(postInputDto, ModelState);

            if (validator.DontMatchRules(postInputDto as IPostInputDto, ModelState))
            {
                return(ValidationProblem(ModelState));
            }

            mapper.Map(postInputDto, postFromRepo);
            blogRepository.SaveChanges();

            if (IncludeLinks(mediaType))
            {
                var idsSet     = new PostIdsSet(authorId, postFromRepo.Id);
                var mappedPost = mapper.Map <PostOutputDto>(postFromRepo);
                return(Ok(ShapeAndLinkSinglePost(mappedPost, idsSet)));
            }

            return(NoContent());
        }
Exemplo n.º 5
0
        private IActionResult AddPost(PostIdsSet idsSet, PostInputDto newPost, bool includeLinks)
        {
            if (validator.DontMatchRules(newPost as IPostInputDto, ModelState))
            {
                return(ValidationProblem(ModelState));
            }

            if (blogRepository.AuthorNotExist(idsSet.authorId))
            {
                return(NotFound());
            }

            var postToAdd = mapper.Map <Post>(newPost);

            postToAdd.AuthorId = idsSet.authorId;
            InsertAuthorsInto(postToAdd);

            if (idsSet.postId != Guid.Empty)
            {
                postToAdd.Id = idsSet.postId;
            }

            blogRepository.AddPostForAuthor(idsSet.authorId, postToAdd);
            blogRepository.SaveChanges();

            var mappedPost = mapper.Map <PostOutputDto>(postToAdd);

            idsSet.postId = mappedPost.Id;

            dynamic toReturn = mappedPost;

            if (includeLinks)
            {
                toReturn = ShapeAndLinkSinglePost(mappedPost, idsSet);
            }

            return(CreatedAtRoute("GetPost",
                                  new { idsSet.authorId, idsSet.postId }, toReturn));
        }
Exemplo n.º 6
0
        public ActionResult <PostOutputDto> GetPost
            (Guid authorId, Guid postId, string fields,
            [FromHeader(Name = "Content-Type")] string mediaType)
        {
            if (validator.FieldsAreInvalid <PostOutputDto>(fields))
            {
                return(BadRequest());
            }

            if (blogRepository.AuthorNotExist(authorId))
            {
                return(NotFound());
            }

            var postFromRepo = blogRepository.GetPostForAuthor(authorId, postId);

            if (postFromRepo is null)
            {
                return(NotFound());
            }

            InsertAuthorsInto(postFromRepo);

            var mappedPost = mapper.Map <PostOutputDto>(postFromRepo);

            InsertCommentsNumberInto(mappedPost);

            var shapedPost = properties.ShapeSingleData(mappedPost, fields);

            if (IncludeLinks(mediaType))
            {
                var idsSet         = new PostIdsSet(authorId, postId);
                var linkedResource = GetLinkedResource(shapedPost, idsSet, fields);
                return(Ok(linkedResource));
            }

            return(Ok(shapedPost));
        }