示例#1
0
        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());
        }
示例#2
0
        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);
            }
        }
示例#3
0
 public VotePostCommand(string userId, string postId, PostVoteDto postVoteDto)
 {
     UserId      = userId;
     PostId      = postId;
     PostVoteDto = postVoteDto;
 }