Ejemplo n.º 1
0
        public async Task <IActionResult> VoteForCandidate(int voterId, VoteForCandidateDto voteForCandidateDto)
        {
            var voterFromQueryHandler = await Mediator.Send(new GetVoterByIdQuery(voterId)) ?? EmptyVoter;

            if (voterFromQueryHandler == EmptyVoter)
            {
                return(ValidationProblem(NO_VOTER_FOUND));
            }

            var candidateFromQueryHandler = await Mediator.Send(new GetCandidateByIdQuery(voteForCandidateDto.CandidateId)) ?? EmptyCandidate;

            if (candidateFromQueryHandler == EmptyCandidate)
            {
                return(ValidationProblem(NO_CANDIDATE_FOUND));
            }

            var voterHasAlreadyVotedForCategory = await Mediator.Send(new VoterHasVotedForCategoryQuery(voterId, candidateFromQueryHandler.CategoryId));

            if (voterHasAlreadyVotedForCategory)
            {
                return(ValidationProblem(VOTER_ALREADY_VOTED_FOR_CANDIDATE));
            }

            var voterCandidateFromQueryHandler = await Mediator.Send(
                new GetVoterCandidateByVoterAndCandidateIdQuery(voteForCandidateDto.CandidateId, voterId)) ?? EmptyVoterCandidate;

            if (voterCandidateFromQueryHandler.VoterId == voterId)
            {
                return(ValidationProblem(VOTER_ALREADY_VOTED_FOR_CANDIDATE));
            }

            var voterCandidateFromCommandHandler = await Mediator.Send(new CreateVoteCandidateCommand(voterId, voteForCandidateDto));

            return(CreatedAtRoute(
                       new { voterId = voterCandidateFromCommandHandler.Id },
                       voterCandidateFromCommandHandler));
        }
 public CreateVoteCandidateCommand(int voterId, VoteForCandidateDto voteForCandidateDto)
 {
     VoterId             = voterId;
     VoteForCandidateDto = voteForCandidateDto;
 }