public void Consume(UserPostFavouritedAction message) { //try //{ using (FsoContext db = new FsoContext()) { Post favouritedPost = db.Set <Post>().Include(p => p.ReputationGains).FirstOrDefault(p => p.Id == message.PostId); double previousRating = favouritedPost.Rating ?? 0; IQueryable <ReputationGain> userReputations = db.SetChild <ReputationGain>().Where(p => p.UserInfoId == message.UserId); if (userReputations != null) { double total = userReputations.Sum(p => p.GainedReputationValue); favouritedPost.Rating = previousRating + 10; } if (favouritedPost.ReputationGains == null) { favouritedPost.ReputationGains = new List <ReputationGain>(); } ReputationGain rpG = db.Set <ReputationGain>().FirstOrDefault(p => p.PostId == message.PostId && p.UserInfoId == message.PostAuthorId); if (rpG == null) { favouritedPost.ReputationGains.Add(new ReputationGain() { Post = favouritedPost, DateUtcAdd = message.DateUtcAction, DateUtcModified = message.DateUtcAction, GainedReputationValue = 10, UserInfoId = message.PostAuthorId }); db.Update(favouritedPost); } else { rpG.GainedReputationValue += 10; db.Update(rpG); } int z = db.SaveChanges(); if (z > 0) { Console.WriteLine("User Favourited Post Activity Handled For User {0} and Post {1}", message.UserId, message.PostId); } else { Console.WriteLine("User Favourited Post Activity CANNOT Handled For User {0} and Post {1}", message.UserId, message.PostId); } } //} //catch (Exception ex) //{ // Console.WriteLine("User Favourited Post Activity CANNOT Handled For User {0} and Post {1}", message.UserId, message.PostId); // Console.WriteLine(ex.Message); // if (ex.InnerException != null) // { // Console.WriteLine(ex.InnerException.Message); // } //} }
public void Consume(UserPostUnfavouritedAction message) { try { using (FsoContext db = new FsoContext()) { Post favouritedPost = db.Set <Post>().Include(p => p.ReputationGains).FirstOrDefault(p => p.Id == message.PostId); double previousRating = favouritedPost.Rating.Value; favouritedPost.Rating = previousRating - 10; ReputationGain rg = db.Set <ReputationGain>().FirstOrDefault(p => p.PostId == message.PostId && p.UserInfoId == message.PostAuthorId); if (rg != null) { db.Update(favouritedPost); rg.GainedReputationValue -= 10; db.Update(rg); } int z = db.SaveChanges(); if (z > 0) { Console.WriteLine("User UnFavourited Post Activity Handled For User {0} and Post {1}", message.UserId, message.PostId); } else { Console.WriteLine("User UnFavourited Post Activity CANNOT Handled For User {0} and Post {1}", message.UserId, message.PostId); } } } catch (Exception ex) { Console.WriteLine("User Favourited Post Activity CANNOT Handled For User {0} and Post {1}", message.UserId, message.PostId); Console.WriteLine(ex.Message); if (ex.InnerException != null) { Console.WriteLine(ex.InnerException.Message); } } }
/// <summary> /// Add review to post /// </summary> /// <param name="postId">PostId</param> /// <param name="rating">Assigned Review Rate</param> /// <param name="content">Content of review</param> /// <param name="currUserId">Current User Id from Claims</param> /// <returns> AddReviewReturnModel which contains information needed for return to user and publish to eventbus</returns> public AddReviewReturnModel AddReview(int postId, double rating, string content, string currUserId, string currUsername) { AddReviewReturnModel ret = new AddReviewReturnModel(); Post post = _postSet.Include(p => p.Reviews).FirstOrDefault(p => p.Id == postId); UserInfo reviewer = _context.Set <UserInfo>().FirstOrDefault(p => p.AppUserId == currUserId); UserInfo reviewed = _context.Set <UserInfo>().FirstOrDefault(p => p.AppUserId == post.UserInfoId); if (post.UserInfoId == currUserId) { ret.IsActionSucceed = false; ret.ErrorInformation.UserInformation = "You cannot review your own post"; //TODO: UNCOMMENT THIS LINE return ret; } bool isPreReviewed = _reviewSet.Any(p => p.PostId == postId && p.UserId == currUserId); // Check if user already reviewed this post // TODO: remove !isPreReviewed if (isPreReviewed && !isPreReviewed) { ret.IsActionSucceed = false; ret.ErrorInformation.UserInformation = "You can only have one review each post"; return(ret); } var reviewerReputation = GetUserReputation(reviewer.AppUserId, int.MaxValue); Review newReview = new Review() { Content = TagHelpers.RemoveUnwantedTags(content), DateUtcPublished = DateTime.UtcNow, PostId = postId, UserId = currUserId, PostRate = rating, UserReputation = reviewerReputation }; _reviewSet.Add(newReview); if (_context.SaveChanges() != 0) { // Reputation for adding review ReputationGain rg = new ReputationGain() { DateUtcAdd = DateTime.UtcNow, DateUtcModified = DateTime.UtcNow, GainedReputationValue = _reputationSettings.InitialReviewReputationValue, UserInfoId = currUserId, PostId = postId, ReviewId = newReview.Id, }; // Reputatin gain of post owner ReputationGain rgofPost = new ReputationGain() { DateUtcAdd = DateTime.UtcNow, DateUtcModified = DateTime.UtcNow, GainedReputationValue = rating, UserInfoId = post.UserInfoId, PostId = postId, ReviewId = newReview.Id, }; _reputationSet.Add(rg); _reputationSet.Add(rgofPost); _postSet.Update(post); ret.PostAuthorId = post.UserInfoId; // Remove post rate to calculate when needed _postCacheService.RemovePostRateCache(post.Id); _context.SaveChanges(); ret.IsActionSucceed = true; ret.Review = new ReviewActivityEntity() { DateUtcPublished = newReview.DateUtcPublished, DislikeCount = 0, Id = newReview.Id, Content = newReview.Content, LikeCount = 0, PostId = newReview.PostId.Value, PostRate = newReview.PostRate.Value, CommentCount = 0, LikeStatus = LikeStatus.None, AuthorInfo = new BaseUserInfoDisplay() { AppUserId = currUserId, ProfileImage = _userProfileImageSettings.UserImageUrlTemplate.Replace("{#appUserId}", currUserId), Username = currUsername } }; return(ret); } ret.IsActionSucceed = false; return(ret); }