private IDictionary <string, object> ShapeAndLinkSinglePost (PostOutputDto postToReturn, PostIdsSet idsSet) { var shapedPost = properties.ShapeSingleData(postToReturn); return(GetLinkedResource(shapedPost, idsSet)); }
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()); }
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))); }
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()); }
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)); }
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)); }