public async Task <ActionResult <VotingView> > Vote( CancellationToken cancellationToken, [FromRoute] Guid votingId, [FromQuery] Guid variantId) { var voting = await _votingRepository.Get(votingId, cancellationToken); if (voting == null) { return(NotFound(votingId)); } var variant = await _context.Variants .Include(o => o.Votes) .SingleOrDefaultAsync(o => o.Id == variantId); if (variant == null) { return(NotFound(variantId)); } var person = await _personRepository.Get(User.GetId(), cancellationToken); if (await IsVoted(person.Id, voting.Id)) { return(Conflict("Already voted!")); } try { voting.Vote(variant.Id, person); } catch (InvalidOperationException exception) { return(BadRequest(exception.Message)); } await _votingRepository.Save(voting, cancellationToken); return(Ok(new VotingView { Id = voting.Id, Title = voting.Title, IsClosed = voting.IsClosed, Variants = voting.Variants.Select(o => new VariantView { Id = o.Id, Title = o.Title, Count = variant.Votes.Count, Votes = o.Votes.Select(v => new VoteView { Id = v.Id, Person = new PersonView { Id = v.Person.Id, Name = v.Person.Name, Surname = v.Person.Surname } }).ToList() }).ToList() })); }