public async Task <IActionResult> Vote([FromRoute] string postId, [FromBody] PostVoteDto postVoteDto) { string userId = _httpContext.User.FindFirstValue("sub"); await _mediator.Send(new VotePostCommand(userId, postId, postVoteDto)); return(Ok()); }
public async Task VotePostAsync(string postId, string userId, PostVoteDto postVoteDto) { try { User user = await _userManager.FindByIdAsync(userId); Guard.Against.NullItem(user, nameof(user)); Post post = await _postRepository.GetByConditionAsync(x => x.Id == postId); Guard.Against.NullItem(post, nameof(post)); var postVote = await _voteRepository.GetEntityVoteAsync <PostVote>( x => (x.PostId == post.Id) && (x.UserId == user.Id), x => x ); if (postVote != null) { postVote.Direction = postVote.Direction == postVoteDto.Direction ? 0 : postVoteDto.Direction; await _voteRepository.UpdateEntityVoteAsync(postVote); } else { var newPostVote = new PostVote { PostId = post.Id, UserId = user.Id, Direction = postVoteDto.Direction, }; await _voteRepository.VoteEntityAsync(newPostVote); } } catch (ValidationException e) { throw new HttpStatusCodeException(HttpStatusCode.UnprocessableEntity, e.Message); } }
public VotePostCommand(string userId, string postId, PostVoteDto postVoteDto) { UserId = userId; PostId = postId; PostVoteDto = postVoteDto; }