コード例 #1
0
ファイル: PostsController.cs プロジェクト: FrostieM/WebBlog
        public IActionResult GetPosts([FromBody] PostsInfo postsInfo)
        {
            var blog = _blogRepository.Blogs
                       .FirstOrDefault(b => b.User.UserName == postsInfo.Username);

            if (blog == null)
            {
                return(NotFound("User not found"));
            }

            var tagsIsNotExist = postsInfo.Tags == null || !postsInfo.Tags.Any();
            var posts          = _postRepository.Posts.Include(p => p.PostTags)
                                 .Where(p => (postsInfo.Type == null || p.Type == postsInfo.Type) &&
                                        p.Blog == blog &&
                                        (tagsIsNotExist || p.PostTags.Any(t => postsInfo.Tags.Contains(t.Tag.Name))))
                                 .OrderByDescending(p => p.Created);

            var totalItems = posts.Count();

            return(Ok(new UserPostsViewData
            {
                Posts = posts
                        .Skip((postsInfo.CurrentPage - 1) * ItemsPerPage)
                        .Take(ItemsPerPage)
                        .Select(p => new ItemViewData <Post>
                {
                    Item = p,
                    Likes = p.Likes.Count,
                    IsLiked = _postLikeRepository.IsLiked(User.Identity.Name, p.Id),
                    Comments = p.Comments.Count
                }),

                PagingInfo = new PagingInfo
                {
                    CurrentPage = postsInfo.CurrentPage,
                    TotalItems = totalItems,
                    ItemsPerPage = ItemsPerPage
                }
            }));
        }
コード例 #2
0
        public IActionResult PostLike(int postId)
        {
            var currentUser = _userRepository.Users.FirstOrDefault(u => u.UserName == User.Identity.Name);

            if (currentUser == null)
            {
                return(NotFound("User not found"));
            }

            var userPost = _postRepository.Posts.FirstOrDefault(p => p.Id == postId);

            if (userPost == null)
            {
                return(NotFound("Post not found"));
            }

            var postLike = _postLikeRepository.PostLikes
                           .FirstOrDefault(l => l.User.Equals(currentUser) && l.Post.Equals(userPost));

            if (postLike == null) //like is not exist
            {
                _postLikeRepository.SavePostLike(new PostLike
                {
                    Post = userPost,
                    User = currentUser
                });
            }
            else //unlike post
            {
                _postLikeRepository.DeletePostLike(postLike);
            }

            return(Ok(new ItemViewData <Post>
            {
                Likes = _postLikeRepository.GetLikes(postId),
                IsLiked = _postLikeRepository.IsLiked(User.Identity.Name, postId)
            }));
        }