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