示例#1
0
        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);
        }
示例#2
0
        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)));
            }
        }
示例#3
0
        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);
        }