/// <summary> /// 根据PersonID获取Content集合。 /// </summary> /// <param name="personId">PersonID</param> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <returns></returns> public async Task<Tuple<bool, List<Content>>> GetContentsByPersonIdAsync(long personId, int pageIndex = 1, int pageSize = int.MaxValue) { BlogHandler blogHandler = new BlogHandler(_dbContext); bool isLoadedAll = true; List<Content> contentList = null; //1. 获取Blog集合。 var blogs = await blogHandler.GetBlogsByPersonId(personId, pageIndex, pageSize); if(blogs.Count > 0) { isLoadedAll = false; //2. 获取Blog集合的ID集合。 List<long> blogIds = blogs.Select(x => x.ID).ToList(); //3. 获取包含BlogID集合的BlogXContent Entities。 List<BlogXContent> bxcList = await Entities.Include(x => x.Content).Where(x => blogIds.Contains(x.BlogID)).ToListAsync(); if (bxcList != null && bxcList.Count > 0) { contentList = new List<Content>(); foreach (var bxc in bxcList) { contentList.Add(bxc.Content); } } } return new Tuple<bool,List<Content>>(isLoadedAll, contentList); }
/// <summary> /// 获取用户自己的Blog /// </summary> /// <param name="personId">PersonID</param> /// <param name="pageIndex">页索引</param> /// <param name="pageSize">页大小</param> /// <returns></returns> public async Task<List<BlogDTO>> GetOwnBlogs(long personId, int pageIndex, int pageSize) { using (KoalaBlogDbContext dbContext = new KoalaBlogDbContext()) { List<BlogDTO> blogDtoList = null; BlogHandler blogHandler = new BlogHandler(dbContext); //1. 获取用户的Blogs集合。 var blogs = await blogHandler.GetBlogsByPersonId(personId, pageIndex, pageSize); if(blogs.Count > 0) { PersonHandler perHandler = new PersonHandler(dbContext); CommentHandler commentHandler = new CommentHandler(dbContext); BlogXBlogHandler bxbHandler = new BlogXBlogHandler(dbContext); EntityLikeHandler likeHandler = new EntityLikeHandler(dbContext); BlogXContentHandler bxcHandler = new BlogXContentHandler(dbContext); blogDtoList = new List<BlogDTO>(); foreach (var blog in blogs) { BlogDTO blogDto = blog.ToDTO(); //2. 判断Person对象是否为空,如果为空则获取。 if (blogDto.Person == null) { var personEntity = await perHandler.GetByIdAsync(blog.PersonID); if (personEntity != null) { blogDto.Person = personEntity.ToDTO(); } } //3. 判断Contents集合是否为空,如果为空则获取。 if (blogDto.Contents == null) { List<Content> contentList = await bxcHandler.GetContentsAsync(blogDto.ID); if (contentList != null && contentList.Count > 0) { blogDto.Contents = new List<ContentDTO>(); foreach (var content in contentList) { ContentDTO contentDto = content.ToDTO(); blogDto.Contents.Add(contentDto); } } } //4. 判断此Blog是否转发了其他Blog。 if (blogDto.BaseBlog == null) { Blog baseBlog = await bxbHandler.GetBaseBlogByBlogIdAsync(blogDto.ID); if (baseBlog != null) { blogDto.BaseBlog = baseBlog.ToDTO(); //4.1 判断转发的Blog的Person对象是否为空,如果为空则获取。不需要获取头像。 if (blogDto.BaseBlog.Person == null) { var personEntity = await perHandler.GetByIdAsync(baseBlog.PersonID); if (personEntity != null) { blogDto.BaseBlog.Person = personEntity.ToDTO(); } } //4.2 判断转发的Blog是否有发Contents。 if (blogDto.BaseBlog.Contents == null) { List<Content> contentList = await bxcHandler.GetContentsAsync(blogDto.BaseBlog.ID); if (contentList != null && contentList.Count > 0) { blogDto.BaseBlog.Contents = new List<ContentDTO>(); foreach (var content in contentList) { ContentDTO contentDto = content.ToDTO(); blogDto.BaseBlog.Contents.Add(contentDto); } } } //4.3 获取转发的Blog的转发数量。 blogDto.BaseBlog.RepostCount = await bxbHandler.GetRepostCountAsync(blogDto.BaseBlog.ID); //4.4 获取转发的Blog的评论数量。 blogDto.BaseBlog.CommentCount = await commentHandler.GetCommentCountAsync(blogDto.BaseBlog.ID); //4.5 获取转发的Blog的点赞数量 blogDto.BaseBlog.LikeCount = await likeHandler.GetBlogLikeCountAsync(blogDto.BaseBlog.ID); //4.6 获取转发的Blog是否已经点赞。 blogDto.BaseBlog.IsLike = await likeHandler.IsLikeAsync(personId, blogDto.BaseBlog.ID, typeof(Blog)); } } //5. 获取评论数量。 blogDto.CommentCount = await commentHandler.GetCommentCountAsync(blog.ID); //6. 获取转发数量。 blogDto.RepostCount = await bxbHandler.GetRepostCountAsync(blog.ID); //7. 获取点赞数量和用户是否已经点赞。 Tuple<int, bool> likeObj = await GetLikeObjectAsync(personId, blog.ID); blogDto.IsLike = likeObj.Item2; blogDto.LikeCount = likeObj.Item1; blogDtoList.Add(blogDto); } } return blogDtoList; } }