diff --git a/Francesco.Recipes.World/Migrations/20250114131454_InitialMigration.Designer.cs b/Francesco.Recipes.World/Migrations/20250114131454_InitialMigration.Designer.cs
deleted file mode 100644
index 77d228f..0000000
--- a/Francesco.Recipes.World/Migrations/20250114131454_InitialMigration.Designer.cs
+++ /dev/null
@@ -1,230 +0,0 @@
-//
-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("20250114131454_InitialMigration")]
- partial class InitialMigration
- {
- ///
- 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");
- });
-
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uniqueidentifier");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.Property("Quantity")
- .HasColumnType("int");
-
- b.Property("UnitId")
- .HasColumnType("uniqueidentifier");
-
- b.HasKey("Id");
-
- b.HasIndex("UnitId");
-
- b.ToTable("Ingredients");
- });
-
- 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")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.Property("RecipeId")
- .HasColumnType("uniqueidentifier");
-
- b.HasKey("Id");
-
- b.HasIndex("RecipeId");
-
- b.ToTable("Instructions");
- });
-
- 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("Description")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.Property("Difficulty")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.Property("PreparationTime")
- .HasColumnType("time");
-
- b.Property("Servings")
- .HasColumnType("int");
-
- b.HasKey("Id");
-
- b.HasIndex("CategoryId");
-
- 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("RecipeId")
- .HasColumnType("uniqueidentifier");
-
- b.HasKey("Id");
-
- b.HasIndex("IngredientId");
-
- b.HasIndex("RecipeId");
-
- b.ToTable("RecipeIngredients");
- });
-
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", b =>
- {
- b.Property("Id")
- .ValueGeneratedOnAdd()
- .HasColumnType("uniqueidentifier");
-
- b.Property("Name")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
-
- b.HasKey("Id");
-
- b.ToTable("Unit");
- });
-
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", b =>
- {
- b.HasOne("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", "Unit")
- .WithMany("Recipes")
- .HasForeignKey("UnitId")
- .OnDelete(DeleteBehavior.Cascade)
- .IsRequired();
-
- b.Navigation("Unit");
- });
-
- 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.Recipe.Recipe", b =>
- {
- b.HasOne("Francesco.Recipes.World.Models.BackendModels.Category.Category", null)
- .WithMany("Recipes")
- .HasForeignKey("CategoryId");
- });
-
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.RecipeIngredient.RecipeIngredient", b =>
- {
- b.HasOne("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", "Ingredient")
- .WithMany()
- .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.Navigation("Ingredient");
-
- b.Navigation("Recipe");
- });
-
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Category.Category", b =>
- {
- b.Navigation("Recipes");
- });
-
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", b =>
- {
- b.Navigation("Instructions");
-
- b.Navigation("RecipeIngredients");
- });
-
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", b =>
- {
- b.Navigation("Recipes");
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Francesco.Recipes.World/Migrations/20250114131454_InitialMigration.cs b/Francesco.Recipes.World/Migrations/20250114131454_InitialMigration.cs
deleted file mode 100644
index b90b0ed..0000000
--- a/Francesco.Recipes.World/Migrations/20250114131454_InitialMigration.cs
+++ /dev/null
@@ -1,184 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-namespace Francesco.Recipes.World.Migrations
-{
- ///
- public partial class InitialMigration : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- if (migrationBuilder == null)
- {
- throw new ArgumentNullException(nameof(migrationBuilder));
- }
-
- migrationBuilder.CreateTable(
- name: "Categories",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- Name = table.Column(type: "nvarchar(max)", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Categories", x => x.Id);
- });
-
- migrationBuilder.CreateTable(
- name: "Unit",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- Name = table.Column(type: "nvarchar(max)", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Unit", x => x.Id);
- });
-
- migrationBuilder.CreateTable(
- name: "Recipes",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- Name = table.Column(type: "nvarchar(max)", nullable: false),
- Description = table.Column(type: "nvarchar(max)", nullable: false),
- Difficulty = table.Column(type: "nvarchar(max)", nullable: false),
- Servings = table.Column(type: "int", nullable: false),
- PreparationTime = table.Column(type: "time", nullable: false),
- CookingTime = table.Column(type: "time", nullable: false),
- CategoryId = table.Column(type: "uniqueidentifier", nullable: true)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Recipes", x => x.Id);
- table.ForeignKey(
- name: "FK_Recipes_Categories_CategoryId",
- column: x => x.CategoryId,
- principalTable: "Categories",
- principalColumn: "Id");
- });
-
- migrationBuilder.CreateTable(
- name: "Ingredients",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- Name = table.Column(type: "nvarchar(max)", nullable: false),
- UnitId = table.Column(type: "uniqueidentifier", nullable: false),
- Quantity = table.Column(type: "int", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Ingredients", x => x.Id);
- table.ForeignKey(
- name: "FK_Ingredients_Unit_UnitId",
- column: x => x.UnitId,
- principalTable: "Unit",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "Instructions",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- Description = table.Column(type: "nvarchar(max)", nullable: false),
- Number = table.Column(type: "nvarchar(max)", nullable: false),
- RecipeId = table.Column(type: "uniqueidentifier", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Instructions", x => x.Id);
- table.ForeignKey(
- name: "FK_Instructions_Recipes_RecipeId",
- column: x => x.RecipeId,
- principalTable: "Recipes",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateTable(
- name: "RecipeIngredients",
- columns: table => new
- {
- Id = table.Column(type: "uniqueidentifier", nullable: false),
- RecipeId = table.Column(type: "uniqueidentifier", nullable: false),
- IngredientId = table.Column(type: "uniqueidentifier", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_RecipeIngredients", x => x.Id);
- table.ForeignKey(
- name: "FK_RecipeIngredients_Ingredients_IngredientId",
- column: x => x.IngredientId,
- principalTable: "Ingredients",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- table.ForeignKey(
- name: "FK_RecipeIngredients_Recipes_RecipeId",
- column: x => x.RecipeId,
- principalTable: "Recipes",
- principalColumn: "Id",
- onDelete: ReferentialAction.Cascade);
- });
-
- migrationBuilder.CreateIndex(
- name: "IX_Ingredients_UnitId",
- table: "Ingredients",
- column: "UnitId");
-
- migrationBuilder.CreateIndex(
- name: "IX_Instructions_RecipeId",
- table: "Instructions",
- column: "RecipeId");
-
- migrationBuilder.CreateIndex(
- name: "IX_RecipeIngredients_IngredientId",
- table: "RecipeIngredients",
- column: "IngredientId");
-
- migrationBuilder.CreateIndex(
- name: "IX_RecipeIngredients_RecipeId",
- table: "RecipeIngredients",
- column: "RecipeId");
-
- migrationBuilder.CreateIndex(
- name: "IX_Recipes_CategoryId",
- table: "Recipes",
- column: "CategoryId");
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- if (migrationBuilder == null)
- {
- throw new ArgumentNullException(nameof(migrationBuilder));
- }
-
- migrationBuilder.DropTable(
- name: "Instructions");
-
- migrationBuilder.DropTable(
- name: "RecipeIngredients");
-
- migrationBuilder.DropTable(
- name: "Ingredients");
-
- migrationBuilder.DropTable(
- name: "Recipes");
-
- migrationBuilder.DropTable(
- name: "Unit");
-
- migrationBuilder.DropTable(
- name: "Categories");
- }
- }
-}
diff --git a/Francesco.Recipes.World/Migrations/20250318105823_InitialMigration.Designer.cs b/Francesco.Recipes.World/Migrations/20250318105823_InitialMigration.Designer.cs
new file mode 100644
index 0000000..ac67bcb
--- /dev/null
+++ b/Francesco.Recipes.World/Migrations/20250318105823_InitialMigration.Designer.cs
@@ -0,0 +1,500 @@
+//
+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("20250318105823_InitialMigration")]
+ partial class InitialMigration
+ {
+ ///
+ 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")
+ .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")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Ingredients");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.IngredientShoppingList.IngredientsShoppingList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IngredientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ShoppinglistId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("IngredientId");
+
+ b.HasIndex("ShoppinglistId");
+
+ b.ToTable("IngredientsShoppingLists");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Number")
+ .HasColumnType("nvarchar(max)");
+
+ 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("Name")
+ .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.Shoppinglist.ShoppingList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .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")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Symbol")
+ .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.IngredientsShoppingList", b =>
+ {
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", "Ingredient")
+ .WithMany("IngredientShoppingLists")
+ .HasForeignKey("IngredientId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Shoppinglist.ShoppingList", "Shoppinglist")
+ .WithMany("IngredientsShoppingLists")
+ .HasForeignKey("ShoppinglistId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ingredient");
+
+ b.Navigation("Shoppinglist");
+ });
+
+ 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")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ 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", null)
+ .WithMany("Recipes")
+ .HasForeignKey("CategoryId");
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Favorit.Favorit", "Favorit")
+ .WithMany("Recipe")
+ .HasForeignKey("FavoritId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ 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.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.Shoppinglist.ShoppingList", b =>
+ {
+ b.Navigation("IngredientsShoppingLists");
+ });
+
+ 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/20250318105823_InitialMigration.cs b/Francesco.Recipes.World/Migrations/20250318105823_InitialMigration.cs
new file mode 100644
index 0000000..1e8d90d
--- /dev/null
+++ b/Francesco.Recipes.World/Migrations/20250318105823_InitialMigration.cs
@@ -0,0 +1,342 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
+
+namespace Francesco.Recipes.World.Migrations
+{
+ ///
+ public partial class InitialMigration : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ if (migrationBuilder == null)
+ {
+ throw new ArgumentNullException(nameof(migrationBuilder));
+ }
+ migrationBuilder.CreateTable(
+ name: "Categories",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ Name = table.Column(type: "nvarchar(max)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Categories", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Favorits",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ CreatedAt = table.Column(type: "datetime2", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Favorits", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Ingredients",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ Name = table.Column(type: "nvarchar(max)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Ingredients", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "ShoppingLists",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ CreatedAt = table.Column(type: "datetime2", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ShoppingLists", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Units",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ Name = table.Column(type: "nvarchar(max)", nullable: true),
+ Symbol = table.Column(type: "nvarchar(max)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Units", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Recipes",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ Name = table.Column(type: "nvarchar(max)", nullable: true),
+ Description = table.Column(type: "nvarchar(max)", nullable: true),
+ Difficulty = table.Column(type: "int", nullable: false),
+ Servings = table.Column(type: "int", nullable: false),
+ PreparationTime = table.Column(type: "time", nullable: false),
+ CookingTime = table.Column(type: "time", nullable: false),
+ IsFavorite = table.Column(type: "bit", nullable: false),
+ CreatedAt = table.Column(type: "datetime2", nullable: false),
+ FavoritId = table.Column(type: "uniqueidentifier", nullable: false),
+ CategoryId = table.Column(type: "uniqueidentifier", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Recipes", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Recipes_Categories_CategoryId",
+ column: x => x.CategoryId,
+ principalTable: "Categories",
+ principalColumn: "Id");
+ table.ForeignKey(
+ name: "FK_Recipes_Favorits_FavoritId",
+ column: x => x.FavoritId,
+ principalTable: "Favorits",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "IngredientsShoppingLists",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ ShoppinglistId = table.Column(type: "uniqueidentifier", nullable: false),
+ IngredientId = table.Column(type: "uniqueidentifier", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_IngredientsShoppingLists", x => x.Id);
+ table.ForeignKey(
+ name: "FK_IngredientsShoppingLists_Ingredients_IngredientId",
+ column: x => x.IngredientId,
+ principalTable: "Ingredients",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_IngredientsShoppingLists_ShoppingLists_ShoppinglistId",
+ column: x => x.ShoppinglistId,
+ principalTable: "ShoppingLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Instructions",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ Description = table.Column(type: "nvarchar(max)", nullable: true),
+ Number = table.Column(type: "nvarchar(max)", nullable: true),
+ RecipeId = table.Column(type: "uniqueidentifier", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Instructions", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Instructions_Recipes_RecipeId",
+ column: x => x.RecipeId,
+ principalTable: "Recipes",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "RecipeIngredients",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ RecipeId = table.Column(type: "uniqueidentifier", nullable: false),
+ IngredientId = table.Column(type: "uniqueidentifier", nullable: false),
+ UnitId = table.Column(type: "uniqueidentifier", nullable: false),
+ Quantity = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_RecipeIngredients", x => x.Id);
+ table.ForeignKey(
+ name: "FK_RecipeIngredients_Ingredients_IngredientId",
+ column: x => x.IngredientId,
+ principalTable: "Ingredients",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_RecipeIngredients_Recipes_RecipeId",
+ column: x => x.RecipeId,
+ principalTable: "Recipes",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_RecipeIngredients_Units_UnitId",
+ column: x => x.UnitId,
+ principalTable: "Units",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "MediaFiles",
+ columns: table => new
+ {
+ Id = table.Column(type: "uniqueidentifier", nullable: false),
+ FileName = table.Column(type: "nvarchar(max)", nullable: true),
+ MimeType = table.Column(type: "nvarchar(max)", nullable: true),
+ Data = table.Column(type: "varbinary(max)", nullable: true),
+ RecipeId = table.Column(type: "uniqueidentifier", nullable: true),
+ InstructionId = table.Column(type: "uniqueidentifier", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_MediaFiles", x => x.Id);
+ table.ForeignKey(
+ name: "FK_MediaFiles_Instructions_InstructionId",
+ column: x => x.InstructionId,
+ principalTable: "Instructions",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_MediaFiles_Recipes_RecipeId",
+ column: x => x.RecipeId,
+ principalTable: "Recipes",
+ principalColumn: "Id");
+ });
+
+ migrationBuilder.InsertData(
+ table: "Categories",
+ columns: new[] { "Id", "Name" },
+ values: new object[,]
+ {
+ { new Guid("0a91a200-dc76-4e00-b38c-b38cab5b69d7"), "Getränke" },
+ { new Guid("20585b74-4805-4aff-a6df-aa6b7af04ff1"), "Kuchen" },
+ { new Guid("23b1c740-e427-44f9-a6ea-d33d3f30f05a"), "Marmeladen & Eingemachtes" },
+ { new Guid("28e39168-701a-4084-81da-d96c987c462f"), "Beilagen & Salate" },
+ { new Guid("5186c5d6-5aff-4a6e-baf4-b61b72d889fe"), "Erste Gänge" },
+ { new Guid("90deec39-dcd0-422d-9018-ac8389e332e1"), "Desserts & Süßspeisen" },
+ { new Guid("abbc6bb0-97ea-49f5-b31e-6507eb784fd1"), "Hauptgerichte" },
+ { new Guid("adfb75ce-3ef3-428b-a5ca-b0c4c619d5ec"), "Hefegebäck & Brot" },
+ { new Guid("b248244f-f21c-4555-a14d-5dd49a2717cf"), "Vorspeisen & Snacks" },
+ { new Guid("d332f88d-d241-48c5-a2f2-bfd124eada7e"), "Soßen & Saucen" }
+ });
+
+ migrationBuilder.InsertData(
+ table: "Units",
+ columns: new[] { "Id", "Name", "Symbol" },
+ values: new object[,]
+ {
+ { new Guid("0c3648ec-4981-42c8-abf8-18bf1a2ff4c2"), "stücke", "stk" },
+ { new Guid("24a91b89-3389-4465-89e4-2f70d2ea6fd7"), "esslöffel", "EL" },
+ { new Guid("2e9894ac-14fa-43fd-ba07-35cdd8ebd461"), "teelöffel", "TL" },
+ { new Guid("62eb2c11-8768-46fb-9db0-c77f940bb4aa"), "liter", "l" },
+ { new Guid("66556e0e-eb2b-4bc3-9a56-135dd508ed09"), "zehe", "zehe" },
+ { new Guid("6c41f7e6-ca75-49cc-8541-cebd5a9c560b"), "gramm", "g" },
+ { new Guid("7e3d1b86-ac48-45d6-814e-d3492a86db1d"), "kilogramm", "kg" },
+ { new Guid("7ea2f51d-7493-4f19-a663-1f309186d3ae"), "bund", "bund" },
+ { new Guid("d82f4abd-e4e4-4104-a9c0-1acdeaa701f5"), "blatt", "blatt" },
+ { new Guid("df5cb4c3-4de6-4c6f-be8c-da41b2986408"), "messerspitze", "msp" },
+ { new Guid("e45a3af2-2ed6-4ac4-b06f-b4175663a7be"), "stange", "stange" }
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_IngredientsShoppingLists_IngredientId",
+ table: "IngredientsShoppingLists",
+ column: "IngredientId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_IngredientsShoppingLists_ShoppinglistId",
+ table: "IngredientsShoppingLists",
+ column: "ShoppinglistId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Instructions_RecipeId",
+ table: "Instructions",
+ column: "RecipeId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_MediaFiles_InstructionId",
+ table: "MediaFiles",
+ column: "InstructionId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_MediaFiles_RecipeId",
+ table: "MediaFiles",
+ column: "RecipeId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_RecipeIngredients_IngredientId",
+ table: "RecipeIngredients",
+ column: "IngredientId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_RecipeIngredients_RecipeId",
+ table: "RecipeIngredients",
+ column: "RecipeId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_RecipeIngredients_UnitId",
+ table: "RecipeIngredients",
+ column: "UnitId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Recipes_CategoryId",
+ table: "Recipes",
+ column: "CategoryId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Recipes_FavoritId",
+ table: "Recipes",
+ column: "FavoritId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ if (migrationBuilder == null)
+ {
+ throw new ArgumentNullException(nameof(migrationBuilder));
+ }
+ migrationBuilder.DropTable(
+ name: "IngredientsShoppingLists");
+
+ migrationBuilder.DropTable(
+ name: "MediaFiles");
+
+ migrationBuilder.DropTable(
+ name: "RecipeIngredients");
+
+ migrationBuilder.DropTable(
+ name: "ShoppingLists");
+
+ migrationBuilder.DropTable(
+ name: "Instructions");
+
+ migrationBuilder.DropTable(
+ name: "Ingredients");
+
+ migrationBuilder.DropTable(
+ name: "Units");
+
+ migrationBuilder.DropTable(
+ name: "Recipes");
+
+ migrationBuilder.DropTable(
+ name: "Categories");
+
+ migrationBuilder.DropTable(
+ name: "Favorits");
+ }
+ }
+}
diff --git a/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs b/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs
index 309c9b2..06d6ff4 100644
--- a/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs
+++ b/Francesco.Recipes.World/Migrations/FrancescosRecipesWorldDbContextModelSnapshot.cs
@@ -29,12 +29,77 @@ namespace Francesco.Recipes.World.Migrations
.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 =>
@@ -44,20 +109,32 @@ namespace Francesco.Recipes.World.Migrations
.HasColumnType("uniqueidentifier");
b.Property("Name")
- .IsRequired()
.HasColumnType("nvarchar(max)");
- b.Property("Quantity")
- .HasColumnType("int");
+ b.HasKey("Id");
- b.Property("UnitId")
+ b.ToTable("Ingredients");
+ });
+
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.IngredientShoppingList.IngredientsShoppingList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IngredientId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ShoppinglistId")
.HasColumnType("uniqueidentifier");
b.HasKey("Id");
- b.HasIndex("UnitId");
+ b.HasIndex("IngredientId");
- b.ToTable("Ingredients");
+ b.HasIndex("ShoppinglistId");
+
+ b.ToTable("IngredientsShoppingLists");
});
modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", b =>
@@ -67,11 +144,9 @@ namespace Francesco.Recipes.World.Migrations
.HasColumnType("uniqueidentifier");
b.Property("Description")
- .IsRequired()
.HasColumnType("nvarchar(max)");
b.Property("Number")
- .IsRequired()
.HasColumnType("nvarchar(max)");
b.Property("RecipeId")
@@ -84,6 +159,36 @@ namespace Francesco.Recipes.World.Migrations
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")
@@ -96,16 +201,22 @@ namespace Francesco.Recipes.World.Migrations
b.Property("CookingTime")
.HasColumnType("time");
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
b.Property("Description")
- .IsRequired()
.HasColumnType("nvarchar(max)");
- b.Property("Difficulty")
- .IsRequired()
- .HasColumnType("nvarchar(max)");
+ b.Property("Difficulty")
+ .HasColumnType("int");
+
+ b.Property("FavoritId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("IsFavorite")
+ .HasColumnType("bit");
b.Property("Name")
- .IsRequired()
.HasColumnType("nvarchar(max)");
b.Property("PreparationTime")
@@ -118,6 +229,8 @@ namespace Francesco.Recipes.World.Migrations
b.HasIndex("CategoryId");
+ b.HasIndex("FavoritId");
+
b.ToTable("Recipes");
});
@@ -130,18 +243,40 @@ namespace Francesco.Recipes.World.Migrations
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.Shoppinglist.ShoppingList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreatedAt")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.ToTable("ShoppingLists");
+ });
+
modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", b =>
{
b.Property("Id")
@@ -149,23 +284,101 @@ namespace Francesco.Recipes.World.Migrations
.HasColumnType("uniqueidentifier");
b.Property("Name")
- .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Symbol")
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
- b.ToTable("Unit");
+ 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.Ingredient.Ingredient", b =>
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.IngredientShoppingList.IngredientsShoppingList", b =>
{
- b.HasOne("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", "Unit")
- .WithMany("Recipes")
- .HasForeignKey("UnitId")
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", "Ingredient")
+ .WithMany("IngredientShoppingLists")
+ .HasForeignKey("IngredientId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
- b.Navigation("Unit");
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Shoppinglist.ShoppingList", "Shoppinglist")
+ .WithMany("IngredientsShoppingLists")
+ .HasForeignKey("ShoppinglistId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Ingredient");
+
+ b.Navigation("Shoppinglist");
});
modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Instruction.Instruction", b =>
@@ -179,17 +392,42 @@ namespace Francesco.Recipes.World.Migrations
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")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ 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", null)
.WithMany("Recipes")
.HasForeignKey("CategoryId");
+
+ b.HasOne("Francesco.Recipes.World.Models.BackendModels.Favorit.Favorit", "Favorit")
+ .WithMany("Recipe")
+ .HasForeignKey("FavoritId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Favorit");
});
modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.RecipeIngredient.RecipeIngredient", b =>
{
b.HasOne("Francesco.Recipes.World.Models.BackendModels.Ingredient.Ingredient", "Ingredient")
- .WithMany()
+ .WithMany("RecipeIngredients")
.HasForeignKey("IngredientId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@@ -200,9 +438,17 @@ namespace Francesco.Recipes.World.Migrations
.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.Category.Category", b =>
@@ -210,16 +456,40 @@ namespace Francesco.Recipes.World.Migrations
b.Navigation("Recipes");
});
- modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Recipe.Recipe", b =>
+ modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Favorit.Favorit", b =>
{
- b.Navigation("Instructions");
+ 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.Shoppinglist.ShoppingList", b =>
+ {
+ b.Navigation("IngredientsShoppingLists");
+ });
+
modelBuilder.Entity("Francesco.Recipes.World.Models.BackendModels.Unit.Unit", b =>
{
- b.Navigation("Recipes");
+ b.Navigation("RecipeIngredient");
});
#pragma warning restore 612, 618
}
diff --git a/Francesco.Recipes.World/Models/BackendModels/Category/Category.cs b/Francesco.Recipes.World/Models/BackendModels/Category/Category.cs
index 5fa42d4..64934a2 100644
--- a/Francesco.Recipes.World/Models/BackendModels/Category/Category.cs
+++ b/Francesco.Recipes.World/Models/BackendModels/Category/Category.cs
@@ -4,7 +4,7 @@
public class Category
{
public Guid Id { get; set; }
- public string Name { get; set; }
+ public string? Name { get; set; }
public virtual ICollection Recipes { get; set; } = new List();
}
}
diff --git a/Francesco.Recipes.World/Models/BackendModels/Favorit/Favorit.cs b/Francesco.Recipes.World/Models/BackendModels/Favorit/Favorit.cs
index 0e91d0e..538dd99 100644
--- a/Francesco.Recipes.World/Models/BackendModels/Favorit/Favorit.cs
+++ b/Francesco.Recipes.World/Models/BackendModels/Favorit/Favorit.cs
@@ -5,6 +5,6 @@
{
public Guid Id { get; set; }
public DateTime CreatedAt { get; set; }
- public virtual Recipe Recipe { get; set; } = new();
+ public virtual ICollection Recipe { get; set; } = new List();
}
}
diff --git a/Francesco.Recipes.World/Models/BackendModels/File/MediaFile.cs b/Francesco.Recipes.World/Models/BackendModels/File/MediaFile.cs
deleted file mode 100644
index 888a735..0000000
--- a/Francesco.Recipes.World/Models/BackendModels/File/MediaFile.cs
+++ /dev/null
@@ -1,11 +0,0 @@
-using Francesco.Recipes.World.Models.BackendModels.File;
-using Francesco.Recipes.World.Models.BackendModels.Instruction;
-using Francesco.Recipes.World.Models.BackendModels.Recipe;
-
-public abstract class MediaFile
-{
- public Guid Id { get; set; } = Guid.NewGuid();
- public string? FileName { get; set; }
- public string? MimeType { get; set; }
- public byte[]? Data { get; set; }
-}
diff --git a/Francesco.Recipes.World/Models/BackendModels/File/MediaFileImageInstruction.cs b/Francesco.Recipes.World/Models/BackendModels/File/MediaFileImageInstruction.cs
deleted file mode 100644
index 70ac229..0000000
--- a/Francesco.Recipes.World/Models/BackendModels/File/MediaFileImageInstruction.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Francesco.Recipes.World.Models.BackendModels.File
-{
- using Francesco.Recipes.World.Models.BackendModels.Instruction;
-
- public class MediaFileImageInstruction : MediaFile
- {
- public virtual Instruction Instruction { get; set; }
- }
-}
diff --git a/Francesco.Recipes.World/Models/BackendModels/File/MediaFileImageRecipe.cs b/Francesco.Recipes.World/Models/BackendModels/File/MediaFileImageRecipe.cs
deleted file mode 100644
index fdac8c4..0000000
--- a/Francesco.Recipes.World/Models/BackendModels/File/MediaFileImageRecipe.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Francesco.Recipes.World.Models.BackendModels.File
-{
- using Francesco.Recipes.World.Models.BackendModels.Recipe;
-
- public class MediaFileImageRecipe : MediaFile
- {
- public virtual Recipe Recipe { get; set; }
- }
-}
diff --git a/Francesco.Recipes.World/Models/BackendModels/File/MediaFileVideoRecipe.cs b/Francesco.Recipes.World/Models/BackendModels/File/MediaFileVideoRecipe.cs
deleted file mode 100644
index 14dd710..0000000
--- a/Francesco.Recipes.World/Models/BackendModels/File/MediaFileVideoRecipe.cs
+++ /dev/null
@@ -1,8 +0,0 @@
-namespace Francesco.Recipes.World.Models.BackendModels.File
-{
- using Francesco.Recipes.World.Models.BackendModels.Recipe;
- public class MediaFileVideoRecipe : MediaFile
- {
- public virtual Recipe Recipe { get; set; }
- }
-}
diff --git a/Francesco.Recipes.World/Models/BackendModels/ITimeStampedEntity.cs b/Francesco.Recipes.World/Models/BackendModels/ITimeStampedEntity.cs
new file mode 100644
index 0000000..baa9f35
--- /dev/null
+++ b/Francesco.Recipes.World/Models/BackendModels/ITimeStampedEntity.cs
@@ -0,0 +1,9 @@
+namespace Francesco.Recipes.World.Models.BackendModels
+{
+ public interface ITimeStampedEntity
+ {
+ DateTime CreatedAt { get; set; }
+
+ DateTime? ModifiedAt { get; set; }
+ }
+}
diff --git a/Francesco.Recipes.World/Models/BackendModels/Ingredient/Ingredient.cs b/Francesco.Recipes.World/Models/BackendModels/Ingredient/Ingredient.cs
index a657e98..291da18 100644
--- a/Francesco.Recipes.World/Models/BackendModels/Ingredient/Ingredient.cs
+++ b/Francesco.Recipes.World/Models/BackendModels/Ingredient/Ingredient.cs
@@ -7,10 +7,8 @@
public class Ingredient
{
public Guid Id { get; set; }
- public string Name { get; set; }
- public int Quantity { get; set; }
+ public string? Name { get; set; }
public virtual ICollection RecipeIngredients { get; set; } = new List();
public virtual ICollection IngredientShoppingLists { get; set; } = new List();
- public virtual Unit Unit { get; set; } = new();
}
}
diff --git a/Francesco.Recipes.World/Models/BackendModels/Instruction/Instruction.cs b/Francesco.Recipes.World/Models/BackendModels/Instruction/Instruction.cs
index ee67e89..fc14bd6 100644
--- a/Francesco.Recipes.World/Models/BackendModels/Instruction/Instruction.cs
+++ b/Francesco.Recipes.World/Models/BackendModels/Instruction/Instruction.cs
@@ -1,13 +1,13 @@
namespace Francesco.Recipes.World.Models.BackendModels.Instruction
{
- using Francesco.Recipes.World.Models.BackendModels.File;
+ using Francesco.Recipes.World.Models.BackendModels.MediaFile;
using Francesco.Recipes.World.Models.BackendModels.Recipe;
public class Instruction
{
public Guid Id { get; set; }
- public string Description { get; set; }
- public string Number { get; set; }
+ public string? Description { get; set; }
+ public string? Number { get; set; }
public virtual Recipe Recipe { get; set; } = new();
- public ICollection MediaFileImageInstructions { get; set; } = new List();
+ public virtual ICollection MediaFiles { get; set; } = new List();
}
}
diff --git a/Francesco.Recipes.World/Models/BackendModels/MediaFile/MediaFile.cs b/Francesco.Recipes.World/Models/BackendModels/MediaFile/MediaFile.cs
new file mode 100644
index 0000000..56c083a
--- /dev/null
+++ b/Francesco.Recipes.World/Models/BackendModels/MediaFile/MediaFile.cs
@@ -0,0 +1,17 @@
+namespace Francesco.Recipes.World.Models.BackendModels.MediaFile
+{
+ using Francesco.Recipes.World.Models.BackendModels.Instruction;
+ using Francesco.Recipes.World.Models.BackendModels.Recipe;
+ public class MediaFile
+ {
+ public Guid Id { get; set; } = Guid.NewGuid();
+
+ public string? FileName { get; set; }
+
+ public string? MimeType { get; set; }
+
+ public byte[]? Data { get; set; }
+ public virtual Recipe? Recipe { get; set; } = new();
+ public virtual Instruction Instruction { get; set; } = new();
+ }
+}
diff --git a/Francesco.Recipes.World/Models/BackendModels/Recipe/Recipe.cs b/Francesco.Recipes.World/Models/BackendModels/Recipe/Recipe.cs
index 2ce3413..6c352a5 100644
--- a/Francesco.Recipes.World/Models/BackendModels/Recipe/Recipe.cs
+++ b/Francesco.Recipes.World/Models/BackendModels/Recipe/Recipe.cs
@@ -2,25 +2,24 @@
{
using Francesco.Recipes.World.Models.BackendModels.Category;
using Francesco.Recipes.World.Models.BackendModels.Favorit;
- using Francesco.Recipes.World.Models.BackendModels.File;
using Francesco.Recipes.World.Models.BackendModels.Instruction;
+ using Francesco.Recipes.World.Models.BackendModels.MediaFile;
using Francesco.Recipes.World.Models.BackendModels.RecipeIngredient;
public class Recipe
{
public Guid Id { get; set; }
- public string Name { get; set; }
- public string Description { get; set; }
+ public string? Name { get; set; }
+ public string? Description { get; set; }
public Difficulty Difficulty { get; set; }
public int Servings { get; set; }
public TimeSpan PreparationTime { get; set; }
public TimeSpan CookingTime { get; set; }
public bool IsFavorite { get; set; }
+ public DateTime CreatedAt { get; set; }
public virtual ICollection RecipeIngredients { get; set; } = new List();
public virtual ICollection Instructions { get; set; } = new List();
- public virtual ICollection Images { get; set; } = new List();
- public virtual ICollection Videos { get; set; } = new List();
- public virtual Category Category { get; set; } = new();
+ public virtual ICollection MediaFiles { get; set; } = new List();
public virtual Favorit Favorit { get; set; } = new();
}
}
diff --git a/Francesco.Recipes.World/Models/BackendModels/RecipeIngredient/RecipeIngredient.cs b/Francesco.Recipes.World/Models/BackendModels/RecipeIngredient/RecipeIngredient.cs
index 84ddb82..30456ad 100644
--- a/Francesco.Recipes.World/Models/BackendModels/RecipeIngredient/RecipeIngredient.cs
+++ b/Francesco.Recipes.World/Models/BackendModels/RecipeIngredient/RecipeIngredient.cs
@@ -2,11 +2,13 @@
{
using Francesco.Recipes.World.Models.BackendModels.Ingredient;
using Francesco.Recipes.World.Models.BackendModels.Recipe;
+ using Francesco.Recipes.World.Models.BackendModels.Unit;
public class RecipeIngredient
{
public Guid Id { get; set; }
- public Guid RecipeId { get; set; }
public virtual Recipe Recipe { get; set; } = new();
public virtual Ingredient Ingredient { get; set; } = new();
+ public virtual Unit Unit { get; set; } = new();
+ public int Quantity { get; set; }
}
}
diff --git a/Francesco.Recipes.World/Models/BackendModels/Unit/Unit.cs b/Francesco.Recipes.World/Models/BackendModels/Unit/Unit.cs
index 3806b7c..902657a 100644
--- a/Francesco.Recipes.World/Models/BackendModels/Unit/Unit.cs
+++ b/Francesco.Recipes.World/Models/BackendModels/Unit/Unit.cs
@@ -3,11 +3,12 @@
namespace Francesco.Recipes.World.Models.BackendModels.Unit
{
using Francesco.Recipes.World.Models.BackendModels.Ingredient;
+ using Francesco.Recipes.World.Models.BackendModels.RecipeIngredient;
public class Unit
{
public Guid Id{ get; set; }
- public string Name{ get; set; }
- public string Symbol { get; set; }
- public virtual ICollection Ingredients { get; set; } = new List();
+ public string? Name { get; set; }
+ public string? Symbol { get; set; }
+ public virtual ICollection RecipeIngredient { get; set; } = new List();
}
}