public IHttpActionResult Vote(int id, VoteRequestModel model)
        {
            var suggestion = this.suggestions
                             .GetSuggestionById(id)
                             .SingleOrDefault();

            if (suggestion == null)
            {
                return(this.BadRequest("Suggestion does not exist"));
            }

            if (!this.suggestions.UserIsEligibleToGetSuggestion(suggestion, this.User.IsInRole(UserConstants.AdminRole)))
            {
                return(this.BadRequest("You do not have permission to vote for that suggestion!"));
            }

            var userId = this.User.Identity.GetUserId();

            var vote = this.votes
                       .GetVote(id, userId)
                       .SingleOrDefault();

            Vote       newVote;
            Suggestion updatedSuggestion;

            if (vote == null)
            {
                newVote = this.votes
                          .AddVote(id, userId, Mapper.Map <Vote>(model));

                updatedSuggestion =
                    model.Type == VoteType.Up ?
                    this.suggestions.UpdateSuggestionsVotesCount(suggestion, suggestion.UpVotesCount + 1, suggestion.DownVotesCount) :
                    this.suggestions.UpdateSuggestionsVotesCount(suggestion, suggestion.UpVotesCount, suggestion.DownVotesCount + 1);
            }
            else
            {
                if (model.Type == vote.Type)
                {
                    this.votes.Delete(vote);

                    updatedSuggestion =
                        model.Type == VoteType.Up ?
                        this.suggestions.UpdateSuggestionsVotesCount(suggestion, suggestion.UpVotesCount - 1, suggestion.DownVotesCount) :
                        this.suggestions.UpdateSuggestionsVotesCount(suggestion, suggestion.UpVotesCount, suggestion.DownVotesCount - 1);
                }
                else
                {
                    newVote = this.votes
                              .ModifyVote(vote, model);

                    updatedSuggestion =
                        model.Type == VoteType.Up ?
                        this.suggestions.UpdateSuggestionsVotesCount(suggestion, suggestion.UpVotesCount + 1, suggestion.DownVotesCount - 1) :
                        this.suggestions.UpdateSuggestionsVotesCount(suggestion, suggestion.UpVotesCount - 1, suggestion.DownVotesCount + 1);
                }
            }

            return(this.Ok(Mapper.Map <SuggestionVoteResponseModel>(updatedSuggestion)));
        }
Exemplo n.º 2
0
        public Vote ModifyVote(Vote voteToModify, VoteRequestModel model)
        {
            voteToModify.Type = model.Type;

            this.votes.SaveChanges();
            return(voteToModify);
        }
Exemplo n.º 3
0
        public async Task <ActionResult <InputVoteResponseModel> > VoteAsync(VoteRequestModel model)
        {
            var userId = this.User.GetId();

            await this.votesService.VoteAsync(model.ArticleId, userId, model.VoteType);

            return(this.GetVotes(model.ArticleId));
        }
 private static Vote ModelToVote(VoteRequestModel voteRequest, Ballot ballot, Choice option, Poll poll)
 {
     return(new Vote
     {
         Choice = option,
         Poll = poll,
         Ballot = ballot,
         VoteValue = voteRequest.VoteValue
     });
 }
Exemplo n.º 5
0
        public async Task <ActionResult> VoteMeal(VoteRequestModel voteRequestModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var user = await _userManager.GetUserAsync(User);

            await _uow.Meals.VoteMealAsync(user.Id, voteRequestModel.VoteEnum, voteRequestModel.MealId);

            try
            {
                await _uow.SaveChangesAsync();
            }
            catch (Exception e)
            {
                var errMsg = "Could not vote for meal";
                _logger.LogError($"{errMsg}: {e.Message}");
                return(BadRequest(errMsg));
            }

            return(Ok());
        }