public PollAndVoteView <TUserView> ToPollAndVoteDto(Poll <TUser> poll, PollChosenAnswer <TUser> chosenAnswer) { return(new PollAndVoteView <TUserView> { Poll = ToPollDto(poll), Answer = chosenAnswer != null?ToPollChosenAnswerDto(chosenAnswer) : null }); }
public PollChosenAnswerView <TUserView> ToPollChosenAnswerDto(PollChosenAnswer <TUser> chosenAnswer) { return(new PollChosenAnswerView <TUserView> { Id = chosenAnswer.Id, Answer = ToPollPossibleAnswerDto(chosenAnswer.Answer), Account = forumUserService.MapToUserView(chosenAnswer.Account) }); }
public async Task <IHttpActionResult <PollChosenAnswerView <TUserView> > > AddAnswer(int pollId, [FromBody] PollPossibleAnswerView value) { // Checks that provided Poll is visible var poll = await session.LoadAsync <Poll <TUser> >(pollId); if (poll.Deleted) { return(BadRequest <PollChosenAnswerView <TUserView> >("Deleted poll")); } var account = await accountService.GetCurrentUserAsync(); // Checks that account hasn't voted yet var answers = await session.SelectAllFrom <PollChosenAnswer <TUser> >() .Where(x => x.Account.Equals(account)) .SingleOrDefaultAsync(); if (answers != null) { return(BadRequest <PollChosenAnswerView <TUserView> >("Already answered")); } using (var transaction = session.BeginTransaction()) { var answer = await session.LoadAsync <PollPossibleAnswer <TUser> >(value.Id); if (answer.Poll != poll) { return(BadRequest <PollChosenAnswerView <TUserView> >("Not a possible answer")); } var chosenAnswer = new PollChosenAnswer <TUser> { Poll = poll, Answer = answer, Account = account }; await session.SaveAsync(chosenAnswer); answer.Count++; await session.UpdateAsync(answer); transaction.Commit(); return(Created("GetPollChosenAnswer", chosenAnswer.Id, pollDataMapping.ToPollChosenAnswerDto(chosenAnswer))); } }