public bool Add(UserPollOptionModel model) { try { var userVote = new UserVote() { PollId = model.PollId, UserId = model.UserId, OptionId = model.OptionId, VotedOn = UnixTimeBaseClass.UnixTimeNow }; _db.UserVotes.Add(userVote); _db.SaveChanges(); return(true); } catch (Exception ex) { JavaScriptSerializer js = new JavaScriptSerializer(); string json = js.Serialize(model); Log.Error("UserVote - Add- " + json, ex); throw; } }
public bool Edit(UserVoteModel model) { using (var scope = new TransactionScope()) { try { var oldOptions = _option.GetOptionList(model.UserId, model.PollId); foreach (var option in model.Options) { if (!oldOptions.Contains(option)) { var userVote = new UserPollOptionModel() { UserId = model.UserId, OptionId = option, PollId = model.PollId }; if (_userVote.IsAlreadyVoted(userVote)) { if (model.Options.Count == 1) { scope.Dispose(); throw new ReturnExceptionModel(new CustomExceptionModel() { StatusCode = HttpStatusCode.BadRequest, Message = "User already voted" }); } } else { _userVote.Add(userVote); } } } foreach (var option in oldOptions) { if (!model.Options.Contains(option)) { _option.Delete(option); } } scope.Complete(); return(true); } catch (Exception ex) { scope.Dispose(); JavaScriptSerializer js = new JavaScriptSerializer(); string json = js.Serialize(model); Log.Error("BL-Voting - Edit" + json, ex); throw new ReturnExceptionModel(new CustomExceptionModel() { StatusCode = HttpStatusCode.BadRequest, Message = ex.Message }); } } }
public bool Add(UserVoteModel model) { using (var scope = new TransactionScope()) { try { if (!_poll.IsActive(model.PollId)) { throw new ReturnExceptionModel(new CustomExceptionModel() { StatusCode = HttpStatusCode.BadRequest, Message = "Voting not started yet." }); } foreach (var option in model.Options) { var userVote = new UserPollOptionModel() { UserId = model.UserId, OptionId = option, PollId = model.PollId }; if (_userVote.IsAlreadyVoted(userVote)) { if (model.Options.Count == 1) { scope.Dispose(); throw new InvalidOperationException("You have already voted for this poll"); } } else { _userVote.Add(userVote); } } scope.Complete(); return(true); } catch (Exception ex) { scope.Dispose(); JavaScriptSerializer js = new JavaScriptSerializer(); string json = js.Serialize(model); Log.Error("BL-Voting - Add" + json, ex); throw new ReturnExceptionModel(new CustomExceptionModel() { StatusCode = HttpStatusCode.BadRequest, Message = ex.Message }); } } }
public bool IsAlreadyVoted(UserPollOptionModel model) { return(_db.UserVotes.Any(x => x.UserId == model.UserId && x.PollId == model.PollId && x.OptionId == model.OptionId)); }