Пример #1
0
        public async Task <IActionResult> PutQuestionVote(QuestionVoteViewModel model)
        {
            if (model.Vote != 1 && model.Vote != -1)
            {
                return(BadRequest());
            }

            var user = await userManager.FindByNameAsync(User.Identity.Name);

            if (user == null)
            {
                return(Unauthorized());
            }

            var question = await _context.Questions.Where(x => x.ID == model.QuestionId).FirstOrDefaultAsync();

            if (question == null)
            {
                return(NotFound());
            }

            var vote = await _context.QuestionVotes.Where(x => x.UserId == user.Id && x.QuestionId == model.QuestionId).FirstOrDefaultAsync();

            if (vote == null)
            {
                return(NotFound("Question has not been voted on yet."));
            }

            if (vote.UserId != user.Id)
            {
                return(Unauthorized());
            }

            if (vote.Vote == model.Vote)
            {
                return(BadRequest($"The vote already is {vote.Vote}"));
            }

            var previousVote = vote.Vote;

            vote.Vote = model.Vote;

            if (previousVote == 1)
            {
                question.Upvotes   -= 1;
                question.Downvotes += 1;
            }
            else
            {
                question.Upvotes   += 1;
                question.Downvotes -= 1;
            }

            await _context.SaveChangesAsync();

            return(NoContent());
        }
Пример #2
0
        public async Task <IActionResult> PostQuestionVote(QuestionVoteViewModel model)
        {
            var user = await userManager.FindByNameAsync(User.Identity.Name);

            if (user == null)
            {
                return(Unauthorized());
            }

            var question = await _context.Questions.Where(x => x.ID == model.QuestionId).FirstOrDefaultAsync();

            if (question == null)
            {
                return(NotFound());
            }

            var vote = await _context.QuestionVotes.Where(x => x.UserId == user.Id && x.QuestionId == model.QuestionId).FirstOrDefaultAsync();

            if (vote != null)
            {
                return(BadRequest("Question has already been voted on."));
            }

            var questionVote = new QuestionVote
            {
                QuestionId = model.QuestionId,
                UserId     = user.Id,
                Vote       = model.Vote
            };

            _context.QuestionVotes.Add(questionVote);

            if (model.Vote == 1)
            {
                question.Upvotes += 1;
            }
            else
            {
                question.Downvotes += 1;
            }

            await _context.SaveChangesAsync();

            return(NoContent());
        }