Example #1
0
    public static void ExecuteAllRecipesAndGenerateWebsite(string cookbookProjectFolder)
    {
        Console.WriteLine("Deleting old cookbook files...");
        string outputFolder = Path.Combine(cookbookProjectFolder, "CookbookOutput");

        if (Directory.Exists(outputFolder))
        {
            Directory.Delete(outputFolder, recursive: true);
        }
        Directory.CreateDirectory(outputFolder);

        string jsonFilePath    = Path.Combine(outputFolder, "recipes.json");
        string imageFolderPath = Path.Combine(outputFolder, "images");

        Directory.CreateDirectory(imageFolderPath);

        Console.WriteLine($"Generating Images...");
        RecipeImages.Generate(imageFolderPath);

        Console.WriteLine($"Generating JSON...");
        string json = RecipeJson.Generate(cookbookProjectFolder);

        File.WriteAllText(jsonFilePath, json);

        Console.WriteLine($"Reading JSON...");
        RecipeSource[] recipes = RecipeJson.GetRecipes(jsonFilePath).Values.Select(x => x).ToArray();

        Console.WriteLine($"Generating website...");
        Website.Generate(outputFolder, recipes);

        Console.WriteLine($"SAVED IN: {outputFolder}");
    }
Example #2
0
        public async Task <IActionResult> Edit(int id, Recipe recipe)
        {
            if (id != recipe.Id)
            {
                return(NotFound());
            }

            string fileName = string.Empty;
            string path     = string.Empty;

            recipe.UserId = Convert.ToInt32(User.FindFirst("Id").Value);

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(recipe);
                    await _context.SaveChangesAsync();

                    var files = HttpContext.Request.Form.Files;
                    if (files.Count > 0)
                    {
                        for (int i = 0; i < files.Count; i++)
                        {
                            var extension = Path.GetExtension(files[i].FileName);
                            fileName = Guid.NewGuid().ToString() + extension;

                            path = Path.Combine(_environment.WebRootPath, "RecipeImages") + "/" + fileName;

                            using (FileStream fs = System.IO.File.Create(path))
                            {
                                files[i].CopyTo(fs);
                                fs.Flush();
                            }

                            RecipeImages recipeImages = new RecipeImages();
                            recipeImages.Image    = fileName;
                            recipeImages.RecipeId = recipe.Id;
                            _context.Add(recipeImages);
                            await _context.SaveChangesAsync();
                        }
                    }
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!RecipeExists(recipe.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(recipe));
        }
Example #3
0
        private static void GenerateEverything(string outputImageFolder, string outputJsonFile, string cookbookFolder)
        {
            Stopwatch sw = Stopwatch.StartNew();

            Console.WriteLine($"Generating images: {outputImageFolder}");
            RecipeImages.Generate(outputImageFolder);

            Console.WriteLine($"Generating source: {outputJsonFile}");
            RecipeJson.Generate(cookbookFolder, outputJsonFile);

            Console.WriteLine($"Finished in {sw.Elapsed.TotalSeconds:F3} seconds");
        }
Example #4
0
        public void Test_Generate_Cookbook()
        {
            Console.WriteLine($"Generating cookbook in:\n{OUTPUT_FOLDER}");

            // DELETE OLD COOKBOOK
            if (Directory.Exists(OUTPUT_FOLDER))
            {
                Directory.Delete(OUTPUT_FOLDER, recursive: true);
            }
            Directory.CreateDirectory(OUTPUT_FOLDER);

            // GENERATE IMAGES
            Console.WriteLine($"Generating PNGs...");
            Stopwatch sw = Stopwatch.StartNew();

            IRecipe[] imageRecipes = RecipeImages.Generate(Path.Join(OUTPUT_FOLDER, "images"));
            Console.WriteLine($"Generated {imageRecipes.Length} PNGs in {sw.Elapsed.TotalSeconds:F4} sec");

            // GENERATE JSON
            Console.Write($"Generating JSON...");
            sw.Restart();
            RecipeSource[] sourceRecipes = RecipeJson.Generate(COOKBOOK_PROJECT_FOLDER, JSON_FILE);
            Console.WriteLine($" {sw.Elapsed.TotalSeconds:F4} sec");

            // READ JSON BACK
            Console.Write($"Validating JSON...");
            sw.Restart();
            List <string> readIDs = new();

            using JsonDocument document = JsonDocument.Parse(File.ReadAllText(JSON_FILE));
            string version   = document.RootElement.GetProperty("version").GetString();
            string generated = document.RootElement.GetProperty("generated").GetString();

            foreach (JsonElement recipeElement in document.RootElement.GetProperty("recipes").EnumerateArray())
            {
                string id          = recipeElement.GetProperty("id").GetString();
                string category    = recipeElement.GetProperty("category").GetString();
                string title       = recipeElement.GetProperty("title").GetString();
                string description = recipeElement.GetProperty("description").GetString();
                string code        = recipeElement.GetProperty("code").GetString();
                readIDs.Add(id);
            }
            Console.WriteLine($" {sw.Elapsed.TotalSeconds:F4} sec");

            // VALIDATE
            Assert.AreEqual(imageRecipes.Length, sourceRecipes.Length);
            Assert.AreEqual(sourceRecipes.Length, readIDs.Count);
        }
Example #5
0
        public async Task <IActionResult> Create(RecipeUserView recipeView)
        {
            string fileName = string.Empty;
            string path     = string.Empty;

            Recipe recipe = new Recipe();

            recipe.Description    = recipeView.RecipeDescription;
            recipe.Name           = recipeView.RecipeName;
            recipe.TimeToComplete = recipeView.RecipeTimeToComplete;

            recipe.UserId = Convert.ToInt32(User.FindFirst("Id").Value);
            //recipe.Image = fileName;
            if (ModelState.IsValid)
            {
                _context.Add(recipe);
                await _context.SaveChangesAsync();

                var files = HttpContext.Request.Form.Files;
                if (files.Count > 0)
                {
                    for (int i = 0; i < files.Count; i++)
                    {
                        var extension = Path.GetExtension(files[i].FileName);
                        fileName = Guid.NewGuid().ToString() + extension;

                        path = Path.Combine(_environment.WebRootPath, "RecipeImages") + "/" + fileName;

                        using (FileStream fs = System.IO.File.Create(path))
                        {
                            files[i].CopyTo(fs);
                            fs.Flush();
                        }

                        RecipeImages recipeImages = new RecipeImages();
                        recipeImages.Image    = fileName;
                        recipeImages.RecipeId = recipe.Id;
                        _context.Add(recipeImages);
                        await _context.SaveChangesAsync();
                    }
                }

                return(RedirectToAction("Recipe", "Index", new { Page = 1 }));
            }
            return(View(recipe));
        }
Example #6
0
    public static RecipeSource[] Generate(string cookbookProjectFolder, string outputFolder, bool regenerate = false)
    {
        string jsonFilePath    = Path.Combine(outputFolder, "recipes.json");
        string imageFolderPath = Path.Combine(outputFolder, "images");

        if (regenerate)
        {
            if (Directory.Exists(imageFolderPath))
            {
                Directory.Delete(imageFolderPath, recursive: true);
            }
            Directory.CreateDirectory(imageFolderPath);

            Console.WriteLine($"Generating Images: {imageFolderPath}");
            RecipeImages.Generate(imageFolderPath);

            Console.WriteLine($"Generating JSON ...");
            string json = RecipeJson.Generate(cookbookProjectFolder);
            File.WriteAllText(jsonFilePath, json);
        }

        Console.WriteLine($"Reading JSON ...");
        return(RecipeJson.GetRecipes(new FileInfo(jsonFilePath)).Values.Select(x => x).ToArray());
    }
        public async Task <IActionResult> OnGetAsync()
        {
            List <string> ingredients = IngredientsText.Split("-", StringSplitOptions.RemoveEmptyEntries).ToList();

            var dbItems = await itemRepository.GetItems();

            // Διαγραφή όποιων υλικών δεν υπάρχουν
            for (int i = ingredients.Count - 1; i >= 0; i--)
            {
                if (!dbItems.Any(itm => itm.Name == ingredients[i]))
                {
                    ingredients.Remove(ingredients[i]);
                }
            }

            List <Item> items = new List <Item>();

            foreach (var ingredient in ingredients)
            {
                items.Add(await itemRepository.GetItem(ingredient));
            }

            List <RecipeHeader> recipeHeaders = new List <RecipeHeader>();
            var dbRecipeDetails = await recipeRepository.GetRecipeDetails();

            foreach (var item in items)
            {
                var tempRecipeDetails = dbRecipeDetails.Where(x => x.ItemId == item.Id);

                foreach (var tempRecipeDetail in tempRecipeDetails)
                {
                    if (tempRecipeDetail.RecipeHeaderId.HasValue)
                    {
                        recipeHeaders.Add(await recipeRepository.GetRecipeHeader(tempRecipeDetail.RecipeHeaderId.Value));
                    }
                }
            }

            var recipeCountViewModel = new RecipeCountViewModel();

            recipeCountViewModel.RecipeHeaders      = recipeHeaders.Distinct();
            recipeCountViewModel.RecipeHeaderCounts = recipeHeaders
                                                      .GroupBy(g => g.Id)
                                                      .Select(x => new RecipeHeaderCount()
            {
                Key = x.Key, Count = x.Count()
            });

            RecipeCountViewModel = recipeCountViewModel;

            foreach (var recipeHeader in RecipeCountViewModel.RecipeHeaders)
            {
                var img = (await recipeImageRepository.GetRecipeImages(recipeHeader.Id))?.FirstOrDefault(x => x.ProfileImage);
                if (img != null)
                {
                    if (RecipeImages is null)
                    {
                        RecipeImages = new List <RecipeImage>();
                    }

                    RecipeImages.Add(img);
                }
            }

            return(Page());
        }