public async Task <IActionResult> CreateComment([FromBody] AddCommentResource commentResource) { Models.Photo photo = await this.photoRepository.GetAsync(commentResource.PhotoId); Models.Comment parentComment = commentResource.ParentId.HasValue ? await commentRepository.GetAsync(commentResource.ParentId.Value) : null; bool isParentCommentFromSamePhoto = (parentComment != null) && (parentComment.Photo.Id == commentResource.PhotoId); if (photo != null && (!commentResource.ParentId.HasValue || isParentCommentFromSamePhoto)) { var comment = this.mapper.Map <AddCommentResource, Models.Comment>(commentResource); var currentUser = new Models.User() { UserName = User.FindFirstValue(ClaimTypes.Name) }; comment.Author = this.userRepository.GetOrAdd(currentUser); comment.Photo = photo; this.commentRepository.Add(comment); await this.unitOfWork.CompleteAsync(); CommentResource resourceResult = mapper.Map <Models.Comment, CommentResource>(comment); resourceResult.ConnectionId = commentResource.ConnectionId; NotifyCommentAdded(comment.Id, commentResource.ConnectionId); return(Ok(resourceResult)); } else { return(BadRequest()); } }
public Models.User GetOrAdd(Models.User user) { string userName = user.UserName; Models.User existingUser = GetByUserName(userName); if (existingUser != null) { return(existingUser); } else { user.Id = System.Guid.NewGuid().ToString("B"); this.context.Users.Add(user); return(user); } }