コード例 #1
0
 public IEnumerable <UserPostCategoryAggregate> GetAggregate(UserPostFilters filter)
 {
     return(_db.UserPostCategories.Where(x => x.UserId == filter.UserId)
            .GroupBy(x => x.CategoryId)
            .Select(x => new UserPostCategoryAggregate()
     {
         Count = x.Count(),
         CategoryId = x.Key
     }));
 }
コード例 #2
0
        public IEnumerable <PostView> GetSuggested(UserPostFilters filters)
        {
            List <PostView> views    = new List <PostView>();
            var             entities = _repo.GetSuggested(filters);

            foreach (var entity in entities)
            {
                views.Add(_mapper.From(entity));
            }

            return(views);
        }
コード例 #3
0
        public IEnumerable <Post> GetSuggested(UserPostFilters filters)
        {
            var categories = _userPostCategories.GetAggregate(filters);
            var tags       = _userPostTags.GetAggregate(filters);

            var useCategories = categories.Count() > 5 ? categories.Take(5) : categories;
            var useTags       = tags.Count() > 20 ? tags.Take(20) : tags;

            List <int> categoryIds = new List <int>();

            foreach (var item in useCategories)
            {
                categoryIds.Add(item.CategoryId);
            }

            List <int> tagIds = new List <int>();

            foreach (var item in useTags)
            {
                tagIds.Add(item.TagId);
            }

            var posts = _db.Posts
                        .Include(p => p.User)
                        .Include(p => p.Category)
                        .Include(p => p.AssociatedTags)
                        .ThenInclude(pt => pt.Tag)
                        .Where(x => categoryIds.Contains(x.CategoryId))
                        .ToList();

            var usedIds = new List <int>();

            foreach (var item in posts)
            {
                usedIds.Add(item.id);
            }

            var tagPosts = _db.Posts
                           .Include(p => p.User)
                           .Include(p => p.Category)
                           .Include(p => p.AssociatedTags)
                           .ThenInclude(pt => pt.Tag)
                           .Where(x => !usedIds.Contains(x.id))
                           .Where(x => x.AssociatedTags.All(p => tagIds.Contains(p.TagId)))
                           .ToList();

            posts.AddRange(tagPosts);

            return(posts);
        }
コード例 #4
0
 public IEnumerable <PostView> GetSuggested([FromQuery] UserPostFilters filters)
 {
     return(((PostService)_crudService).GetSuggested(filters));
 }
コード例 #5
0
 IEnumerable <UserPostCategory> Repository <UserPostCategory, UserPostFilters> .GetAll(UserPostFilters filter)
 {
     return(_db.UserPostCategories.Where(x => x.UserId == filter.UserId).ToList());
 }
コード例 #6
0
 public IEnumerable <UserPostTag> GetAll(UserPostFilters filter)
 {
     return(_db.UserPostTags.Where(x => x.UserId == filter.UserId).ToList());
 }