コード例 #1
0
        public IEnumerable <Recipe> GetAllMatchingPublicPlusUserRecipes(Guid userId, List <Guid> tags = null)
        {
            tags = tags ?? new List <Guid>();

            var fridgeId      = _fridgeRepository.GetUserFridge(userId).Id;
            var exceptionList = _context.RecipeProducts
                                .GroupJoin(_context.FridgeProducts.Where(fp => fp.FridgeId == fridgeId).ToList(),
                                           rp => rp.ProductId,
                                           fp => fp.ProductId,
                                           (rp, fp) => new { FridgeProduct = fp, RecipeProduct = rp })
                                .SelectMany(p => p.FridgeProduct.DefaultIfEmpty(), (x, y) =>
                                            new { FridgeProduct = y, RecipeProduct = x.RecipeProduct })// RIGHT JOIN
                                .Where(p => p.FridgeProduct == null)
                                .Select(p => p.RecipeProduct.Recipe.Id).
                                Distinct().ToList();

            var result = _context.Recipes
                         .Include(r => r.RecipeProducts)
                         .Include(r => r.User)
                         .Include(r => r.RecipeTags)
                         .ThenInclude(rt => rt.Tag)
                         .Where(r => !exceptionList.Contains(r.Id))
                         .Where(r => r.UserId == userId || !r.IsPrivate)
                         .ToList();

            if (tags.Count() == 0)
            {
                return(result);
            }

            var tagsCompliant = _context.RecipeTags
                                .GroupBy(rt => rt.RecipeId,
                                         rt => rt.TagId,
                                         (recipeId, recipeTags) => new { RecipeId = recipeId, Tags = recipeTags.ToList() })
                                .Where(x => !tags.Except(x.Tags).Any())
                                .Select(r => r.RecipeId)
                                .ToList();

            return(result.Where(r => tagsCompliant.Contains(r.Id)));
        }
コード例 #2
0
ファイル: FridgeController.cs プロジェクト: adgryz/FoodNet
        public Fridge GetUserFridge()
        {
            var UserId = GetUserId();

            return(_fridgeRepository.GetUserFridge(UserId));
        }
コード例 #3
0
ファイル: FridgesDTOFacade.cs プロジェクト: adgryz/FoodNet
 public FridgeDTO GetUserFridge(Guid UserId)
 {
     return(_mapper.Map <Fridge, FridgeDTO>(_fridgeRepository.GetUserFridge(UserId)));
 }