diff --git a/Francesco.Recipes.World/Migrations/20250430094852_MakeInstructionOptionalInMediaFile.Designer.cs b/Francesco.Recipes.World/Migrations/20250430094852_MakeInstructionOptionalInMediaFile.Designer.cs
new file mode 100644
index 0000000..6344cb6
--- /dev/null
+++ b/Francesco.Recipes.World/Migrations/20250430094852_MakeInstructionOptionalInMediaFile.Designer.cs
@@ -0,0 +1,571 @@
+//
+using System;
+using Francesco.Recipes.World.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace Francesco.Recipes.World.Migrations
+{
+ [DbContext(typeof(FrancescosRecipesWorldDbContext))]
+ [Migration("20250430094852_MakeInstructionOptionalInMediaFile")]
+ partial class MakeInstructionOptionalInMediaFile
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.11")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Category.Category", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Categories");
+
+ b.HasData(
+ new
+ {
+ Id = new Guid("b248244f-f21c-4555-a14d-5dd49a2717cf"),
+ Name = "Vorspeisen & Snacks"
+ },
+ new
+ {
+ Id = new Guid("5186c5d6-5aff-4a6e-baf4-b61b72d889fe"),
+ Name = "Erste Gänge"
+ },
+ new
+ {
+ Id = new Guid("abbc6bb0-97ea-49f5-b31e-6507eb784fd1"),
+ Name = "Hauptgerichte"
+ },
+ new
+ {
+ Id = new Guid("90deec39-dcd0-422d-9018-ac8389e332e1"),
+ Name = "Desserts & Süßspeisen"
+ },
+ new
+ {
+ Id = new Guid("28e39168-701a-4084-81da-d96c987c462f"),
+ Name = "Beilagen & Salate"
+ },
+ new
+ {
+ Id = new Guid("20585b74-4805-4aff-a6df-aa6b7af04ff1"),
+ Name = "Kuchen"
+ },
+ new
+ {
+ Id = new Guid("adfb75ce-3ef3-428b-a5ca-b0c4c619d5ec"),
+ Name = "Hefegebäck & Brot"
+ },
+ new
+ {
+ Id = new Guid("d332f88d-d241-48c5-a2f2-bfd124eada7e"),
+ Name = "Soßen & Saucen"
+ },
+ new
+ {
+ Id = new Guid("23b1c740-e427-44f9-a6ea-d33d3f30f05a"),
+ Name = "Marmeladen & Eingemachtes"
+ },
+ new
+ {
+ Id = new Guid("0a91a200-dc76-4e00-b38c-b38cab5b69d7"),
+ Name = "Getränke"
+ });
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Favorit.Favorit", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.ToTable("Favorits");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Ingredients");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.IngredientShoppingList.RecipeIngredientShoppingList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IngredientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsChecked")
+ .HasColumnType("bit");
+
+ b.Property("RecipeIngredientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RecipeShoppingListId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IngredientId");
+
+ b.HasIndex("RecipeIngredientId");
+
+ b.HasIndex("RecipeShoppingListId");
+
+ b.ToTable("RecipeIngredientsShoppingLists");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Number")
+ .HasColumnType("int");
+
+ b.Property("RecipeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RecipeId");
+
+ b.ToTable("Instructions");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.MediaFile.MediaFile", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Data")
+ .HasColumnType("varbinary(max)");
+
+ b.Property("FileName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("InstructionId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("MimeType")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("RecipeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("InstructionId");
+
+ b.HasIndex("RecipeId");
+
+ b.ToTable("MediaFiles");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CategoryId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CookingTime")
+ .HasColumnType("time");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Difficulty")
+ .HasColumnType("int");
+
+ b.Property("FavoritId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsFavorite")
+ .HasColumnType("bit");
+
+ b.Property("ModifiedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PreparationTime")
+ .HasColumnType("time");
+
+ b.Property("Servings")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CategoryId");
+
+ b.HasIndex("FavoritId");
+
+ b.ToTable("Recipes");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.RecipeIngredient.RecipeIngredient", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IngredientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Quantity")
+ .HasColumnType("int");
+
+ b.Property("RecipeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UnitId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IngredientId");
+
+ b.HasIndex("RecipeId");
+
+ b.HasIndex("UnitId");
+
+ b.ToTable("RecipeIngredients");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.RecipeShoppingList.RecipeShoppingList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("RecipeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ShoppingListId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RecipeId");
+
+ b.HasIndex("ShoppingListId");
+
+ b.ToTable("RecipeShoppingLists");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Shoppinglist.ShoppingList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.Property("ModifiedAt")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.ToTable("ShoppingLists");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Symbol")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Units");
+
+ b.HasData(
+ new
+ {
+ Id = new Guid("62eb2c11-8768-46fb-9db0-c77f940bb4aa"),
+ Name = "liter",
+ Symbol = "l"
+ },
+ new
+ {
+ Id = new Guid("6c41f7e6-ca75-49cc-8541-cebd5a9c560b"),
+ Name = "gramm",
+ Symbol = "g"
+ },
+ new
+ {
+ Id = new Guid("7e3d1b86-ac48-45d6-814e-d3492a86db1d"),
+ Name = "kilogramm",
+ Symbol = "kg"
+ },
+ new
+ {
+ Id = new Guid("0c3648ec-4981-42c8-abf8-18bf1a2ff4c2"),
+ Name = "stücke",
+ Symbol = "stk"
+ },
+ new
+ {
+ Id = new Guid("d82f4abd-e4e4-4104-a9c0-1acdeaa701f5"),
+ Name = "blatt",
+ Symbol = "blatt"
+ },
+ new
+ {
+ Id = new Guid("df5cb4c3-4de6-4c6f-be8c-da41b2986408"),
+ Name = "messerspitze",
+ Symbol = "msp"
+ },
+ new
+ {
+ Id = new Guid("e45a3af2-2ed6-4ac4-b06f-b4175663a7be"),
+ Name = "stange",
+ Symbol = "stange"
+ },
+ new
+ {
+ Id = new Guid("7ea2f51d-7493-4f19-a663-1f309186d3ae"),
+ Name = "bund",
+ Symbol = "bund"
+ },
+ new
+ {
+ Id = new Guid("66556e0e-eb2b-4bc3-9a56-135dd508ed09"),
+ Name = "zehe",
+ Symbol = "zehe"
+ },
+ new
+ {
+ Id = new Guid("2e9894ac-14fa-43fd-ba07-35cdd8ebd461"),
+ Name = "teelöffel",
+ Symbol = "TL"
+ },
+ new
+ {
+ Id = new Guid("24a91b89-3389-4465-89e4-2f70d2ea6fd7"),
+ Name = "esslöffel",
+ Symbol = "EL"
+ });
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.IngredientShoppingList.RecipeIngredientShoppingList", b =>
+ {
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", null)
+ .WithMany("IngredientShoppingLists")
+ .HasForeignKey("IngredientId");
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.RecipeIngredient.RecipeIngredient", "RecipeIngredient")
+ .WithMany()
+ .HasForeignKey("RecipeIngredientId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.RecipeShoppingList.RecipeShoppingList", "RecipeShoppingList")
+ .WithMany("SelectedIngredients")
+ .HasForeignKey("RecipeShoppingListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("RecipeIngredient");
+
+ b.Navigation("RecipeShoppingList");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", b =>
+ {
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", "Recipe")
+ .WithMany("Instructions")
+ .HasForeignKey("RecipeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Recipe");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.MediaFile.MediaFile", b =>
+ {
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", "Instruction")
+ .WithMany("MediaFiles")
+ .HasForeignKey("InstructionId");
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", "Recipe")
+ .WithMany("MediaFiles")
+ .HasForeignKey("RecipeId");
+
+ b.Navigation("Instruction");
+
+ b.Navigation("Recipe");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", b =>
+ {
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Category.Category", "Category")
+ .WithMany("Recipes")
+ .HasForeignKey("CategoryId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Favorit.Favorit", "Favorit")
+ .WithMany("Recipe")
+ .HasForeignKey("FavoritId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Category");
+
+ b.Navigation("Favorit");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.RecipeIngredient.RecipeIngredient", b =>
+ {
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", "Ingredient")
+ .WithMany("RecipeIngredients")
+ .HasForeignKey("IngredientId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", "Recipe")
+ .WithMany("RecipeIngredients")
+ .HasForeignKey("RecipeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", "Unit")
+ .WithMany("RecipeIngredient")
+ .HasForeignKey("UnitId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ingredient");
+
+ b.Navigation("Recipe");
+
+ b.Navigation("Unit");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.RecipeShoppingList.RecipeShoppingList", b =>
+ {
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", "Recipe")
+ .WithMany()
+ .HasForeignKey("RecipeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Shoppinglist.ShoppingList", "ShoppingList")
+ .WithMany("RecipeShoppingList")
+ .HasForeignKey("ShoppingListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Recipe");
+
+ b.Navigation("ShoppingList");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Category.Category", b =>
+ {
+ b.Navigation("Recipes");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Favorit.Favorit", b =>
+ {
+ b.Navigation("Recipe");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", b =>
+ {
+ b.Navigation("IngredientShoppingLists");
+
+ b.Navigation("RecipeIngredients");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", b =>
+ {
+ b.Navigation("MediaFiles");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", b =>
+ {
+ b.Navigation("Instructions");
+
+ b.Navigation("MediaFiles");
+
+ b.Navigation("RecipeIngredients");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.RecipeShoppingList.RecipeShoppingList", b =>
+ {
+ b.Navigation("SelectedIngredients");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Shoppinglist.ShoppingList", b =>
+ {
+ b.Navigation("RecipeShoppingList");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", b =>
+ {
+ b.Navigation("RecipeIngredient");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Francesco.Recipes.World/Migrations/20250430094852_MakeInstructionOptionalInMediaFile.cs b/Francesco.Recipes.World/Migrations/20250430094852_MakeInstructionOptionalInMediaFile.cs
new file mode 100644
index 0000000..b6fb4f7
--- /dev/null
+++ b/Francesco.Recipes.World/Migrations/20250430094852_MakeInstructionOptionalInMediaFile.cs
@@ -0,0 +1,69 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Francesco.Recipes.World.Migrations
+{
+ ///
+ public partial class MakeInstructionOptionalInMediaFile : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ if (migrationBuilder is null)
+ {
+ throw new ArgumentNullException(nameof(migrationBuilder));
+ }
+
+ migrationBuilder.DropForeignKey(
+ name: "FK_MediaFiles_Instructions_InstructionId",
+ table: "MediaFiles");
+
+ migrationBuilder.AlterColumn(
+ name: "InstructionId",
+ table: "MediaFiles",
+ type: "uniqueidentifier",
+ nullable: true,
+ oldClrType: typeof(Guid),
+ oldType: "uniqueidentifier");
+
+ migrationBuilder.AddForeignKey(
+ name: "FK_MediaFiles_Instructions_InstructionId",
+ table: "MediaFiles",
+ column: "InstructionId",
+ principalTable: "Instructions",
+ principalColumn: "Id");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ if (migrationBuilder is null)
+ {
+ throw new ArgumentNullException(nameof(migrationBuilder));
+ }
+
+ migrationBuilder.DropForeignKey(
+ name: "FK_MediaFiles_Instructions_InstructionId",
+ table: "MediaFiles");
+
+ migrationBuilder.AlterColumn(
+ name: "InstructionId",
+ table: "MediaFiles",
+ type: "uniqueidentifier",
+ nullable: false,
+ defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
+ oldClrType: typeof(Guid),
+ oldType: "uniqueidentifier",
+ oldNullable: true);
+
+ migrationBuilder.AddForeignKey(
+ name: "FK_MediaFiles_Instructions_InstructionId",
+ table: "MediaFiles",
+ column: "InstructionId",
+ principalTable: "Instructions",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ }
+ }
+}
diff --git a/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs b/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs
index c27540a..5def152 100644
--- a/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs
+++ b/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs
@@ -182,7 +182,7 @@ namespace Francesco.Recipes.World.Migrations
b.Property("FileName")
.HasColumnType("nvarchar(max)");
- b.Property("InstructionId")
+ b.Property("InstructionId")
.HasColumnType("uniqueidentifier");
b.Property("MimeType")
@@ -441,9 +441,7 @@ namespace Francesco.Recipes.World.Migrations
{
b.HasOne("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", "Instruction")
.WithMany("MediaFiles")
- .HasForeignKey("InstructionId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
+ .HasForeignKey("InstructionId");
b.HasOne("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", "Recipe")
.WithMany("MediaFiles")
@@ -509,7 +507,7 @@ namespace Francesco.Recipes.World.Migrations
.IsRequired();
b.HasOne("Francesco.Recipes.World.Models.BackendModels.Shoppinglist.ShoppingList", "ShoppingList")
- .WithMany("RecipeIngredientShoppingLists")
+ .WithMany("RecipeShoppingList")
.HasForeignKey("ShoppingListId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@@ -557,7 +555,7 @@ namespace Francesco.Recipes.World.Migrations
modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Shoppinglist.ShoppingList", b =>
{
- b.Navigation("RecipeIngredientShoppingLists");
+ b.Navigation("RecipeShoppingList");
});
modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", b =>