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}"); }
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)); }
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"); }
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); }
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)); }
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()); }