Пример #1
0
        public RecipeResult CreateRecipe(AuthIdentity identity, Recipe recipe)
        {
            using (var session = GetSession())
             {
            using (var transaction = session.BeginTransaction())
            {
               // Create Recipe
               var dbRecipe = new Models.Recipes
               {
                  Title = recipe.Title,
                  Description = recipe.Description,
                  CookTime = recipe.CookTime,
                  PrepTime = recipe.PrepTime,
                  Credit = recipe.Credit,
                  CreditUrl = recipe.CreditUrl,
                  DateEntered = recipe.DateEntered,
                  ImageUrl = recipe.ImageUrl,
                  Rating = recipe.AvgRating,
                  ServingSize = recipe.ServingSize,
                  Steps = recipe.Method
               };

               session.Save(dbRecipe);

               // Create Ingredients
               short displayOrder = 0;
               recipe.Ingredients.ForEach(i =>
               {
                  var dbIngredient = new RecipeIngredients
                  {
                     Recipe = dbRecipe,
                     Ingredient = Models.Ingredients.FromId(i.Ingredient.Id),
                     IngredientForm = (i.Form != null ? IngredientForms.FromId(i.Form.FormId) : null),
                     Qty = (i.Amount != null ? (float?) i.Amount.SizeHigh : null),
                     QtyLow = (i.Amount != null ? (float?) i.Amount.SizeLow : null),
                     Unit = (i.Amount != null ? i.Amount.Unit : Units.Unit),
                     Section = i.Section,
                     DisplayOrder = ++displayOrder
                  };

                  session.Save(dbIngredient);
               });

               // Create RecipeMetadata
               var dbMetadata = new RecipeMetadata
               {
                  Recipe = dbRecipe,
                  DietGlutenFree = recipe.Tags.HasTag(RecipeTag.GlutenFree),
                  DietNoAnimals = recipe.Tags.HasTag(RecipeTag.NoAnimals),
                  DietNomeat = recipe.Tags.HasTag(RecipeTag.NoMeat),
                  DietNoPork = recipe.Tags.HasTag(RecipeTag.NoPork),
                  DietNoRedMeat = recipe.Tags.HasTag(RecipeTag.NoRedMeat),
                  MealBreakfast = recipe.Tags.HasTag(RecipeTag.Breakfast),
                  MealDessert = recipe.Tags.HasTag(RecipeTag.Dessert),
                  MealDinner = recipe.Tags.HasTag(RecipeTag.Dinner),
                  MealLunch = recipe.Tags.HasTag(RecipeTag.Lunch),
                  NutritionLowCalorie = recipe.Tags.HasTag(RecipeTag.LowCalorie),
                  NutritionLowCarb = recipe.Tags.HasTag(RecipeTag.LowCarb),
                  NutritionLowFat = recipe.Tags.HasTag(RecipeTag.LowFat),
                  NutritionLowSodium = recipe.Tags.HasTag(RecipeTag.LowSodium),
                  NutritionLowSugar = recipe.Tags.HasTag(RecipeTag.LowSugar),
                  SkillCommon = recipe.Tags.HasTag(RecipeTag.Common),
                  SkillEasy = recipe.Tags.HasTag(RecipeTag.Easy),
                  SkillQuick = recipe.Tags.HasTag(RecipeTag.Quick)
               };

               session.Save(dbMetadata);
               transaction.Commit();

               return new RecipeResult
               {
                  RecipeCreated = true,
                  NewRecipeId = dbRecipe.RecipeId
               };
            }
             }
        }
        private static IQueryOver<Recipes, Recipes> SearchByTaste(
            RecipeQuery query,
            IQueryOver<Recipes, Recipes> recipesQuery,
            RecipeMetadata metadata)
        {
            if (query.Taste.MildToSpicy != SpicinessLevel.Medium)
            {
                recipesQuery = query.Taste.MildToSpicy < SpicinessLevel.Medium
                                   ? recipesQuery.Where(() => metadata.TasteMildToSpicy <= query.Taste.Spiciness)
                                         .OrderBy(() => metadata.TasteMildToSpicy)
                                         .Asc()
                                   : recipesQuery.Where(() => metadata.TasteMildToSpicy >= query.Taste.Spiciness)
                                         .OrderBy(() => metadata.TasteMildToSpicy)
                                         .Desc();
            }

            if (query.Taste.SavoryToSweet != SweetnessLevel.Medium)
            {
                recipesQuery = query.Taste.SavoryToSweet < SweetnessLevel.Medium
                                   ? recipesQuery.Where(() => metadata.TasteSavoryToSweet <= query.Taste.Sweetness)
                                         .OrderBy(() => metadata.TasteSavoryToSweet)
                                         .Asc()
                                   : recipesQuery.Where(() => metadata.TasteSavoryToSweet >= query.Taste.Sweetness)
                                         .OrderBy(() => metadata.TasteSavoryToSweet)
                                         .Desc();
            }

            return recipesQuery;
        }
 private static RecipeMetadata CreateRecipeMetadata(Recipe recipe, Recipes databaseRecipe)
 {
     var databaseMetadata = new RecipeMetadata
                          {
                              Recipe = databaseRecipe,
                              DietGlutenFree = recipe.Tags.HasTag(RecipeTag.GlutenFree),
                              DietNoAnimals = recipe.Tags.HasTag(RecipeTag.NoAnimals),
                              DietNomeat = recipe.Tags.HasTag(RecipeTag.NoMeat),
                              DietNoPork = recipe.Tags.HasTag(RecipeTag.NoPork),
                              DietNoRedMeat = recipe.Tags.HasTag(RecipeTag.NoRedMeat),
                              MealBreakfast = recipe.Tags.HasTag(RecipeTag.Breakfast),
                              MealDessert = recipe.Tags.HasTag(RecipeTag.Dessert),
                              MealDinner = recipe.Tags.HasTag(RecipeTag.Dinner),
                              MealLunch = recipe.Tags.HasTag(RecipeTag.Lunch),
                              NutritionLowCalorie = recipe.Tags.HasTag(RecipeTag.LowCalorie),
                              NutritionLowCarb = recipe.Tags.HasTag(RecipeTag.LowCarb),
                              NutritionLowFat = recipe.Tags.HasTag(RecipeTag.LowFat),
                              NutritionLowSodium = recipe.Tags.HasTag(RecipeTag.LowSodium),
                              NutritionLowSugar = recipe.Tags.HasTag(RecipeTag.LowSugar),
                              SkillCommon = recipe.Tags.HasTag(RecipeTag.Common),
                              SkillEasy = recipe.Tags.HasTag(RecipeTag.Easy),
                              SkillQuick = recipe.Tags.HasTag(RecipeTag.Quick)
                          };
     return databaseMetadata;
 }
        private static IQueryOver<Recipes, Recipes> SearchBySkill(
            RecipeQuery query,
            IQueryOver<Recipes, Recipes> recipesQuery,
            RecipeMetadata metadata)
        {
            if (query.Skill.Common)
            {
                recipesQuery = recipesQuery.Where(() => metadata.SkillCommon).OrderBy(() => metadata.Commonality).Desc();
            }

            if (query.Skill.Easy)
            {
                recipesQuery = recipesQuery.Where(() => metadata.SkillEasy);
            }

            if (query.Skill.Quick)
            {
                recipesQuery = recipesQuery.Where(() => metadata.SkillQuick);
            }

            return recipesQuery;
        }
        private static IQueryOver<Recipes, Recipes> SearchByNutrition(
            RecipeQuery query,
            IQueryOver<Recipes, Recipes> recipesQuery,
            RecipeMetadata metadata)
        {
            if (query.Nutrition.LowCalorie)
            {
                recipesQuery = recipesQuery.Where(() => metadata.NutritionLowCalorie);
            }

            if (query.Nutrition.LowCarb)
            {
                recipesQuery = recipesQuery.Where(() => metadata.NutritionLowCarb);
            }

            if (query.Nutrition.LowFat)
            {
                recipesQuery = recipesQuery.Where(() => metadata.NutritionLowFat);
            }

            if (query.Nutrition.LowSodium)
            {
                recipesQuery = recipesQuery.Where(() => metadata.NutritionLowSodium);
            }

            if (query.Nutrition.LowSugar)
            {
                recipesQuery = recipesQuery.Where(() => metadata.NutritionLowSugar);
            }

            return recipesQuery;
        }
        private static IQueryOver<Recipes, Recipes> SearchByMeal(
            RecipeQuery query,
            IQueryOver<Recipes, Recipes> recipesQuery,
            RecipeMetadata metadata)
        {
            if (query.Meal != MealFilter.All)
            {
                if (query.Meal == MealFilter.Breakfast)
                {
                    recipesQuery = recipesQuery.Where(() => metadata.MealBreakfast);
                }

                if (query.Meal == MealFilter.Dessert)
                {
                    recipesQuery = recipesQuery.Where(() => metadata.MealDessert);
                }

                if (query.Meal == MealFilter.Dinner)
                {
                    recipesQuery = recipesQuery.Where(() => metadata.MealDinner);
                }

                if (query.Meal == MealFilter.Lunch)
                {
                    recipesQuery = recipesQuery.Where(() => metadata.MealLunch);
                }
            }

            return recipesQuery;
        }
        private static IQueryOver<Recipes, Recipes> SearchByHighResolutionPhotos(
            RecipeQuery query,
            IQueryOver<Recipes, Recipes> recipesQuery,
            RecipeMetadata metadata)
        {
            int highResolution = 1024 * 768;
            if (query.Photos == PhotoFilter.HighRes)
            {
                recipesQuery = recipesQuery.Where(() => metadata.PhotoRes >= highResolution);
            }

            return recipesQuery;
        }
        private static IQueryOver<Recipes, Recipes> SearchByDiet(
            RecipeQuery query,
            IQueryOver<Recipes, Recipes> recipesQuery,
            RecipeMetadata metadata)
        {
            if (query.Diet.GlutenFree)
            {
                recipesQuery = recipesQuery.Where(() => metadata.DietGlutenFree);
            }

            if (query.Diet.NoAnimals)
            {
                recipesQuery = recipesQuery.Where(() => metadata.DietNoAnimals);
            }

            if (query.Diet.NoMeat)
            {
                recipesQuery = recipesQuery.Where(() => metadata.DietNomeat);
            }

            if (query.Diet.NoPork)
            {
                recipesQuery = recipesQuery.Where(() => metadata.DietNoPork);
            }

            if (query.Diet.NoRedMeat)
            {
                recipesQuery = recipesQuery.Where(() => metadata.DietNoRedMeat);
            }

            return recipesQuery;
        }