private HelpfulnessVoteResponse RegisterAnonymousVote(HelpfulnessVoteModel voteModel, ProductReview productReview, Product productPage, bool isHelpful) { if (productReview.Votes.Any(v => v.IPAddress == voteModel.IPAddress)) { return(new HelpfulnessVoteResponse { Type = ProductReviewResponseType.Info, Message = "Already voted", RedirectUrl = "~/" + productPage.LiveUrlSegment }); } var vote = new HelpfulnessVote { IsHelpful = isHelpful, ProductReview = productReview, IPAddress = voteModel.IPAddress }; productReview.Votes.Add(vote); _session.Transact(session => session.Save(vote)); return(new HelpfulnessVoteResponse { Message = "Vote registered", RedirectUrl = "~/" + productPage.LiveUrlSegment, Type = ProductReviewResponseType.Success }); }
public ActionResult HelpfulnessVotes_POST( [IoCModelBinder(typeof(SetIPAddressModelBinder))] HelpfulnessVoteModel voteModel) { var response = _helpfulnessVoteService.Upvote(voteModel); if (Request.IsAjaxRequest()) { return(Json(response.IsSuccess())); } TempData["productreview-response-info"] = response; return (Redirect(string.IsNullOrWhiteSpace(response.RedirectUrl) ? Referrer != null ? Referrer.ToString() : "~/" : response.RedirectUrl)); //if (CurrentRequestData.CurrentUser != null) // vote.User = CurrentRequestData.CurrentUser; //vote.IsHelpful = true; //_helpfulnessVoteService.Add(vote); //TempData["vote-submitted"] = true; //return Redirect(Referrer.ToString()); }
public HelpfulnessVoteResponse Downvote(HelpfulnessVoteModel voteModel) { var productReview = _session.Get <ProductReview>(voteModel.ProductReviewId); if (productReview == null) { return(new HelpfulnessVoteResponse { Type = ProductReviewResponseType.Error, Message = "Could not find product review to vote" }); } Product productPage = productReview.ProductVariant.Product; User currentUser = CurrentRequestData.CurrentUser; if (currentUser != null) { return(RegisterLoggedInVote(voteModel, productReview, currentUser, productPage, false)); } return(RegisterAnonymousVote(voteModel, productReview, productPage, false)); }
private HelpfulnessVoteResponse RegisterLoggedInVote(HelpfulnessVoteModel voteModel, ProductReview productReview, User currentUser, Product productPage, bool isHelpful) { if (productReview.Votes.Any(v => v.IsHelpful == isHelpful && v.User == currentUser)) { return(new HelpfulnessVoteResponse { Type = ProductReviewResponseType.Info, Message = "Already voted", RedirectUrl = "~/" + productPage.LiveUrlSegment }); } List <HelpfulnessVote> oppositeVotes = productReview.Votes.Where(v => v.IsHelpful != isHelpful && v.User == currentUser).ToList(); if (oppositeVotes.Any()) { _session.Transact(session => oppositeVotes.ForEach(v => { productReview.Votes.Remove(v); session.Delete(v); })); } var vote = new HelpfulnessVote { IsHelpful = isHelpful, User = currentUser, ProductReview = productReview, IPAddress = voteModel.IPAddress }; productReview.Votes.Add(vote); _session.Transact(session => session.Save(vote)); return(new HelpfulnessVoteResponse { Message = "Vote registered", RedirectUrl = "~/" + productPage.LiveUrlSegment, Type = ProductReviewResponseType.Success }); }