public LikePostReturn UnlikePost(int postId, string currUserId) { LikePostReturn ret = new LikePostReturn(); ret.IsActionSucceed = true; ret.IsLiked = false; UserPostLike uLike = _dbEntitySet.Where(f => f.UserInfoId == currUserId && f.PostId == postId).FirstOrDefault(); if (uLike != null) { _dbEntitySet.Remove(uLike); Post pst = _context.Set <Post>().AsNoTracking().FirstOrDefault(p => p.Id == postId); int[] gps = _context.SetChild <GroupPost>().Where(p => p.PostId == postId).Select(f => f.GroupId).ToArray(); List <UserGroup> ugs = _context.SetChild <UserGroup>().Where(p => gps.Contains(p.GroupId) && p.UserId == pst.UserInfoId).ToList(); foreach (var item in ugs) { item.UserReputationInGroup -= 10; _context.GetChildDbEntityEntrySafely <UserGroup>(item).State = EntityState.Modified; } if (!(_context.SaveChanges() <= 0)) { int[] prevLikes = _userLikesCacheService.GetUserLikedPostsIds(currUserId); prevLikes = prevLikes.Where(val => val != postId).ToArray(); _userLikesCacheService.SetUserLikedPostsIds(currUserId, prevLikes, 30); } } ret.PostAuthorId = _postSet.Where(p => p.Id == postId).Select(p => p.UserInfoId).FirstOrDefault(); return(ret); }
public IActionResult LikePost([FromBody] PostIdModel model) { var user = HttpContext.User; LikePostReturn ret = new LikePostReturn(); try { Claim idClaim = User.FindFirst("sub"); Claim userNameClaim = User.FindFirst("nickname"); if (idClaim == null) { ret.ErrorInformation.ErrorType = ErrorType.RedirectAuth; ret.ErrorInformation.RedirectUrl = ""; ret.IsActionSucceed = false; return(Ok(Json(ret))); } string userId = idClaim.Value; ret = _postActionService.LikePost(model.PostId, userId); if (ret.IsActionSucceed) { _eventBus.Publish <UserPostFavouritedAction>(new UserPostFavouritedAction() { UserId = userId, PostId = model.PostId, PostAuthorId = ret.PostAuthorId, DateUtcAction = DateTime.UtcNow, Username = userNameClaim.Value }, "#"); } return(Ok(Json(ret))); } catch (Exception) { ret.ErrorInformation.ErrorType = ErrorType.NoAction; ret.ErrorInformation.UserInformation = "Sorry, an error occured!"; ret.IsActionSucceed = false; return(Ok(Json(ret))); } }
public LikePostReturn LikePost(int postId, string currUserId) { LikePostReturn ret = new LikePostReturn { IsLiked = true, IsActionSucceed = true }; UserPostLike rel = _dbEntitySet.FirstOrDefault(f => f.UserInfoId == currUserId && f.PostId == postId); if (rel == null) { _dbEntitySet.Add(new UserPostLike() { PostId = postId, UserInfoId = currUserId, DateUtcLiked = DateTime.UtcNow }); Post pst = _context.Set <Post>().AsNoTracking().FirstOrDefault(p => p.Id == postId); int[] gps = _context.SetChild <GroupPost>().Where(p => p.PostId == postId).Select(f => f.GroupId).ToArray(); List <UserGroup> ugs = _context.SetChild <UserGroup>().Where(p => gps.Contains(p.GroupId) && p.UserId == pst.UserInfoId).ToList(); foreach (var item in ugs) { item.UserReputationInGroup += 10; _context.GetChildDbEntityEntrySafely <UserGroup>(item).State = EntityState.Modified; } if (!(_context.SaveChanges() <= 0)) { ret.IsActionSucceed = true; int[] prevLikes = _userLikesCacheService.GetUserLikedPostsIds(currUserId); prevLikes = prevLikes.Append(postId).ToArray(); _userLikesCacheService.SetUserLikedPostsIds(currUserId, prevLikes, 30); } } ret.PostAuthorId = _postSet.Where(p => p.Id == postId).Select(p => p.UserInfoId).FirstOrDefault(); return(ret); }