public IActionResult UpvoteMovie(int id)
        {
            try
            {
                var movie = _context.Movies.Where(r => r.Id.Equals(id)).FirstOrDefault();

                if (movie == null)
                {
                    throw new Exception("no movie found");
                }

                var vote = _context.Votes.Where(r => r.UserId.Equals(getUserId()) && r.MovieId.Equals(id)).FirstOrDefault();

                if (vote == null)
                {
                    vote = new Data.Entities.Vote()
                    {
                        MovieId = id,
                        UserId  = getUserId(),
                        Value   = 1
                    };


                    _context.Votes.Add(vote);

                    movie.CurrentVotes += 1;
                }
                else
                {
                    movie.CurrentVotes -= vote.Value;

                    if (vote.Value == 1)
                    {
                        vote.Value = 0;
                    }
                    else
                    {
                        vote.Value          = 1;
                        movie.CurrentVotes += 1;
                    }
                }

                _context.SaveChanges();

                return(new JsonResult(new Models.VoteMovieResponse()
                {
                    CurrentVotes = movie.CurrentVotes,
                    UserVote = vote.Value,
                    Success = true
                }));
            }
            catch (Exception e)
            {
                return(new JsonResult(new Models.VoteMovieResponse()
                {
                    Success = false
                }));
            }
        }
        public async Task <IActionResult> AddVote([FromBody] VoteRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "Bad request"
                }));
            }

            var user = await this.userHelper.GetUserByEmailAsync(request.Email);

            if (user == null)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "This email is not assigned to any user."
                }));
            }

            var vote = new Data.Entities.Vote
            {
                User = user
            };

            var result = await this.votingEventRepository.AddVoteAsync(vote, request.CandidateId);

            if (result)
            {
                return(Ok(new Response
                {
                    IsSuccess = true,
                    Message = "Your vote has been correctly registered!"
                }));
            }
            else
            {
                return(Ok(new Response
                {
                    IsSuccess = false,
                    Message = $"candidate not found { request.CandidateId}"
                }));
            }
        }
Exemple #3
0
        public async Task <IActionResult> PostVote([FromBody] Common.Models.NewVote vote)
        {
            if (!ModelState.IsValid)
            {
                return(this.BadRequest(ModelState));
            }

            var user = await this.userHelper.GetUserByEmailAsync(vote.Email);

            if (user == null)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "Invalid user"
                }));
            }

            var @event = await this.eventRepository.GetByIdAsync(vote.Event);

            if (@event == null)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "Invalid event"
                }));
            }

            if (@event.StartDate > DateTime.Now)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "The voting event has not started yet"
                }));
            }

            if (@event.FinishDate < DateTime.Now)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "The voting event has closed"
                }));
            }

            int userVote = this.voteRepository.GetNumberVotes(user.Email, @event.Id);

            if (userVote > 0)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "You already voted in this event"
                }));
            }

            var candidate = await this.eventRepository.GetCandidateAsync(vote.Candidate);

            if (candidate == null)
            {
                return(this.BadRequest(new Response
                {
                    IsSuccess = false,
                    Message = "Invalid candidate"
                }));
            }

            candidate.TotalVotes++;
            await this.eventRepository.UpdateCandidateAsync(candidate);

            var entityVote = new Data.Entities.Vote
            {
                User      = user,
                Event     = @event,
                Candidate = candidate
            };

            await this.voteRepository.CreateAsync(entityVote);

            return(Ok(new Response
            {
                IsSuccess = true,
                Message = $"Registered vote. The candidate \"{entityVote.Candidate.Name}\" has {candidate.TotalVotes} votes"
            }));
        }