Exemplo n.º 1
0
        public IActionResult Like(int postId)
        {
            if (!isLoggedIn)
            {
                return(RedirectToAction("Index", "Home"));
            }

            UserPostLike existingLike = db.UserPostLikes
                                        .FirstOrDefault(like => like.PostId == postId && (int)uid == like.UserId);

            if (existingLike == null)
            {
                UserPostLike like = new UserPostLike()
                {
                    PostId = postId,
                    UserId = (int)uid
                };

                db.UserPostLikes.Add(like);
            }
            else
            {
                db.UserPostLikes.Remove(existingLike);
            }

            db.SaveChanges();
            return(RedirectToAction("All"));
        }
Exemplo n.º 2
0
        public ActionResult PostLike(int postId, int discussionId)
        {
            var userId = User.Identity.GetUserId();

            var like = context.UsersPostLikes.SingleOrDefault(l => l.PostId == postId && l.UserId == userId);

            if (like != null)
            {
                context.UsersPostLikes.Remove(like);
            }
            else
            {
                like = new UserPostLike()
                {
                    PostId = postId, UserId = userId
                };

                context.UsersPostLikes.Add(like);

                var dislike = context.UsersPostDislikes.SingleOrDefault(l => l.PostId == postId && l.UserId == userId);
                if (dislike != null)
                {
                    context.UsersPostDislikes.Remove(dislike);
                }
            }


            context.SaveChanges();
            return(RedirectToAction("Discussion", new { discussionId = discussionId }));
        }
Exemplo n.º 3
0
        public async Task <IActionResult> LikePost([FromRoute] int id)
        {
            if (!await PostExist(id))
            {
                return(BadRequest($"Пост не найден"));
            }

            var user = await _currentUser.GetCurrentUser(HttpContext);

            var like = await _context.UserPostLike.FirstOrDefaultAsync(l =>
                                                                       l.UserId == user.Id && l.PostId == id);

            var post = await _context.Posts.FirstOrDefaultAsync(c => c.Id == id);

            if (like != null)
            {
                return(BadRequest("Вы уже поставили лайк"));
            }

            like = new UserPostLike {
                UserId = user.Id, PostId = id
            };
            _context.UserPostLike.Add(like);
            post.LikesCount++;

            _context.Update(post);
            await _context.SaveChangesAsync();

            return(Ok());
        }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var category = await _context.Categories.FindAsync(request.CategoryId);

                if (category == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Category = "Not found" });
                }
                var post = new Post
                {
                    Id          = request.Id,
                    Heading     = request.Heading,
                    Description = request.Description,
                    Category    = category,
                    Date        = DateTime.Now,
                    For         = 0,
                    Against     = 0,
                    Photos      = new List <Photo>(),
                    IsActive    = true,
                };

                if (request.File != null && request.File.Length > 0)
                {
                    var photoUploadResult = await _photoAccessor.UploadFileAsync("pakshya.bucket", request.File);

                    var photo = new Photo
                    {
                        Url = photoUploadResult.Url,
                        Id  = photoUploadResult.Key
                    };
                    post.Photos.Add(photo);
                }
                await _context.Posts.AddAsync(post, cancellationToken);

                var user = await _context.Users.SingleOrDefaultAsync(x => x.Email == _userAccessor.GetEmail(), cancellationToken : cancellationToken);

                var isHost = new UserPostLike
                {
                    AppUser  = user,
                    Post     = post,
                    IsAuthor = true,
                    IsLiked  = false
                };
                await _context.UserPostLikes.AddAsync(isHost, cancellationToken);

                var success = await _context.SaveChangesAsync(cancellationToken) > 0;

                if (success)
                {
                    return(Unit.Value);
                }

                throw new Exception("problem saving new post.");
            }
        public static void LikeUserPost(int userId, int userPostId)
        {
            var context = new SocialNetworkContext();

            var user = context.Users.Find(userId);
            var post = context.UserPosts.Find(userPostId);
            var like = new UserPostLike()
            {
                Author = user,
                Post   = post
            };

            context.UserPostLikes.Add(like);
            context.SaveChanges();
        }
Exemplo n.º 7
0
        public async Task <UserPostLike> UserLikePost(Guid userId, Guid postId)
        {
            if (postId == Guid.Empty)
            {
                throw new ArgumentNullException(nameof(postId));
            }
            if (userId == Guid.Empty)
            {
                throw new ArgumentNullException(nameof(userId));
            }

            var userPostLike = new UserPostLike
            {
                PostId = postId,
                UserId = userId,
            };
            await _context.AddRangeAsync(userPostLike).ConfigureAwait(false);

            return(userPostLike);
        }
Exemplo n.º 8
0
            public async Task <Unit> Handle(Command request, CancellationToken cancellationToken)
            {
                var post = await _context.Posts.FindAsync(request.Id);

                if (post == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, new { Post = "Can't find post." });
                }
                var user = await _context.Users.SingleOrDefaultAsync(x => x.Email == _userAccessor.GetEmail(), cancellationToken : cancellationToken);

                var userLikeOrPost = await _context.UserPostLikes.SingleOrDefaultAsync(x => x.PostId == post.Id && x.AppUserId == user.Id, cancellationToken : cancellationToken);

                if (userLikeOrPost?.IsLiked == true)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { Attendence = "Already Liked." });
                }
                else if (userLikeOrPost?.IsLiked == false)
                {
                    userLikeOrPost.IsLiked = true;
                }
                else
                {
                    var newLike = new UserPostLike
                    {
                        Post     = post,
                        AppUser  = user,
                        IsAuthor = false,
                        IsLiked  = true
                    };
                    await _context.UserPostLikes.AddAsync(newLike, cancellationToken);
                }
                var success = await _context.SaveChangesAsync(cancellationToken) > 0;

                if (success)
                {
                    return(Unit.Value);
                }

                throw new Exception("Problem saving new post.");
            }
Exemplo n.º 9
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);
        }
Exemplo n.º 10
0
 public void UserUnlikeAPost(UserPostLike currentUserPostLike)
 {
     _context.Remove(currentUserPostLike);
 }