Esempio n. 1
0
        public async Task <VoteGetModel> CastVoteAsync(VoteCreateModel voteModel)
        {
            var matchedVote = await _voteRepository
                              .GetSingleAsync(v => v.UserId == voteModel.UserId &&
                                              (v.QuestionId == null || v.QuestionId == voteModel.TargetId) &&
                                              (v.AnswerId == null || v.AnswerId == voteModel.TargetId) &&
                                              (v.CommentId == null || v.CommentId == voteModel.TargetId));

            if (matchedVote != null)
            {
                throw new BusinessException($"User already voted on {voteModel.VoteTarget} on '{matchedVote.CreatedOn}'.");
            }
            IVoteable target = await GetVoteableFromRepositoryAsync(voteModel.VoteTarget, voteModel.TargetId);

            if (target == null)
            {
                throw new EntityNotFoundException(voteModel.VoteTarget.ToString(), voteModel.TargetId);
            }
            var vote = Vote.CreateVote(voteModel.UserId, target, voteModel.VoteType);

            target.ApplyVote(vote);
            await _uow.SaveAsync();

            await ChangeCachedVotesSumAfterVoteCast(vote);

            _eventRegister.RegisterEvent <VoteCast>(new { UserId = vote.UserId, VoteType = vote.VoteType });
            return(_mapper.Map <VoteGetModel>(vote));
        }
Esempio n. 2
0
        public ActionResult AddVote(VoteModel model)
        {
            if (ModelState.IsValid)
            {
                VoteInfo voteInfo = new VoteInfo();
                voteInfo.Title     = model.Title;
                voteInfo.StartTime = model.StartTime;
                voteInfo.EndTime   = model.EndTime;
                voteInfo.State     = model.State;
                voteInfo.Type      = model.Type;

                Vote.CreateVote(voteInfo);

                return(PromptView("投票基本信息添加成功"));
            }
            ViewData["referer"] = SiteUtils.GetAdminRefererCookie();
            return(View(model));
        }
Esempio n. 3
0
 public Vote Build()
 {
     if (_question != null)
     {
         _target = Vote.CreateVote(_userId, _question, _voteType);
     }
     else if (_answer != null)
     {
         _target = Vote.CreateVote(_userId, _answer, _voteType);
     }
     else
     {
         _target = Vote.CreateVote(_userId, _comment, _voteType);
     }
     _target.SetProperty(
         nameof(_target.CreatedOn),
         _createdOn ?? _target.CreatedOn);
     return(_target);
 }