From cbd2ba7dfb217ee8b51c9c2ddcac11be723eac1d Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 22 Apr 2025 14:32:19 +0200 Subject: [PATCH 1/8] use ViewModel in Index action instead of raw entities --- .../Controller/HomeController/HomeController.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Francesco.Recipes.World/Controller/HomeController/HomeController.cs b/Francesco.Recipes.World/Controller/HomeController/HomeController.cs index 9bd9a0a..88df8bc 100644 --- a/Francesco.Recipes.World/Controller/HomeController/HomeController.cs +++ b/Francesco.Recipes.World/Controller/HomeController/HomeController.cs @@ -2,6 +2,7 @@ { using Francesco.Recipes.World.Repositories.Category; using Francesco.Recipes.World.Repositories.Recipe; + using Francesco.Recipes.World.Views.Category; using Microsoft.AspNetCore.Mvc; public class HomeController : Controller @@ -19,7 +20,14 @@ public async Task Index() { var categories = await _categoryRepository.GetAllCategoriesWithRecipesAsync(); - return View("Index", categories); + + var viewModel = categories.Select(category => new CategoryRecipesViewModel + { + Category = category, + Recipes = category.Recipes, + }); + + return View("Index", viewModel); } [HttpGet("/Home/Search")] From 71c9f27d64a516d09e771b71562c0770519d7c67 Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 22 Apr 2025 14:37:19 +0200 Subject: [PATCH 2/8] Including MediaFile of Recipe for show it on card --- .../Repositories/Category/CategoryRepository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Francesco.Recipes.World/Repositories/Category/CategoryRepository.cs b/Francesco.Recipes.World/Repositories/Category/CategoryRepository.cs index 39e7228..821f14f 100644 --- a/Francesco.Recipes.World/Repositories/Category/CategoryRepository.cs +++ b/Francesco.Recipes.World/Repositories/Category/CategoryRepository.cs @@ -46,6 +46,7 @@ { return await _context.Categories .Include(c => c.Recipes) + .ThenInclude(r => r.MediaFiles) .ToListAsync(); } } From cc590fa65c6fff791beccf7405da4a3a2684bba3 Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 22 Apr 2025 14:38:57 +0200 Subject: [PATCH 3/8] Make a rude Index Home Page with a bit style --- .../Views/Home/Index.cshtml | 82 ++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/Francesco.Recipes.World/Views/Home/Index.cshtml b/Francesco.Recipes.World/Views/Home/Index.cshtml index 8de8ea4..38c290a 100644 --- a/Francesco.Recipes.World/Views/Home/Index.cshtml +++ b/Francesco.Recipes.World/Views/Home/Index.cshtml @@ -1,6 +1,86 @@ -
+@model IEnumerable +@Html.AntiForgeryToken() + +
+ Willkommen +

Willkommen in der Rezept-App

+
+ + + +
+ +@foreach (var category in Model) +{ +
+
+

@category.Category.Name

+ Alle @category.Category.Name-Rezepte anzeigen +
+ +
+ @foreach (var recipe in category.Recipes) + { + var mediaFile = recipe.MediaFiles?.FirstOrDefault(); + var imageData = mediaFile?.Data; + var mimeType = mediaFile?.MimeType; + + + } + +
+ +
+
+
+} + + From 5f92625c16c5112a159dd385bb7805607a2df076 Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 22 Apr 2025 14:40:25 +0200 Subject: [PATCH 4/8] Make a PartialView for favorite System --- .../Views/Shared/_FavoriteButton.cshtml | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Francesco.Recipes.World/Views/Shared/_FavoriteButton.cshtml diff --git a/Francesco.Recipes.World/Views/Shared/_FavoriteButton.cshtml b/Francesco.Recipes.World/Views/Shared/_FavoriteButton.cshtml new file mode 100644 index 0000000..5cd045a --- /dev/null +++ b/Francesco.Recipes.World/Views/Shared/_FavoriteButton.cshtml @@ -0,0 +1,25 @@ +@model Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe + + From 1239f316733c0881ad9077ae0d1815deb365d387 Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 22 Apr 2025 14:42:04 +0200 Subject: [PATCH 5/8] add HTMX CSRF token header support --- Francesco.Recipes.World/Views/Shared/_Layout.cshtml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Francesco.Recipes.World/Views/Shared/_Layout.cshtml b/Francesco.Recipes.World/Views/Shared/_Layout.cshtml index fa98366..dace8db 100644 --- a/Francesco.Recipes.World/Views/Shared/_Layout.cshtml +++ b/Francesco.Recipes.World/Views/Shared/_Layout.cshtml @@ -73,6 +73,15 @@ document.body.classList.remove('bg-dark', 'text-white'); }); + + @await RenderSectionAsync("Scripts", required: false) From 323af8d6f0475a8c8b575f4a158b0fd6afe44e45 Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 22 Apr 2025 14:42:46 +0200 Subject: [PATCH 6/8] Create new folder for images and put one svg for favorite symbol --- Francesco.Recipes.World/wwwroot/images/star.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 Francesco.Recipes.World/wwwroot/images/star.svg diff --git a/Francesco.Recipes.World/wwwroot/images/star.svg b/Francesco.Recipes.World/wwwroot/images/star.svg new file mode 100644 index 0000000..25afd22 --- /dev/null +++ b/Francesco.Recipes.World/wwwroot/images/star.svg @@ -0,0 +1 @@ + \ No newline at end of file From 16a9d1084452e8546ad6e778649c452d39a66798 Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 22 Apr 2025 14:49:29 +0200 Subject: [PATCH 7/8] Return PartialView instead an Redirection --- .../Controller/Recipe/RecipeController.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs b/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs index b86ef61..d78e31a 100644 --- a/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs +++ b/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs @@ -13,6 +13,8 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; + [Route("Recipe")] + public class RecipeController : Controller { private readonly IRecipeRepository _recipeRepository; @@ -248,7 +250,13 @@ public async Task AddFavorite(Guid recipeId) { await _favoriteRepository.AddFavoriteAsync(recipeId); - return RedirectToAction("Details", new { recipeId }); + var recipe = await _recipeRepository.GetRecipeByIdAsync(recipeId); + if (recipe == null) + { + return NotFound("Recipe not found."); + } + + return PartialView("_FavoriteButton", recipe); } // POST: /Recipe/RemoveFavorite @@ -257,7 +265,13 @@ public async Task RemoveFavorite(Guid recipeId) { await _favoriteRepository.RemoveFavoriteAsync(recipeId); - return RedirectToAction("Details", new { recipeId }); + var recipe = await _recipeRepository.GetRecipeByIdAsync(recipeId); + if (recipe == null) + { + return NotFound("Recipe not found."); + } + + return PartialView("_FavoriteButton", recipe); } } } From 12752c4834325549a2df63daea22701562b6074b Mon Sep 17 00:00:00 2001 From: franc Date: Wed, 23 Apr 2025 11:26:14 +0200 Subject: [PATCH 8/8] Delete unecessary Route --- Francesco.Recipes.World/Controller/Recipe/RecipeController.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs b/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs index d78e31a..24d9618 100644 --- a/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs +++ b/Francesco.Recipes.World/Controller/Recipe/RecipeController.cs @@ -13,7 +13,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; - [Route("Recipe")] public class RecipeController : Controller {