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}" })); } }
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" })); }