diff --git a/SushiBar.sln b/SushiBar.sln
index 9456259..ce801dd 100644
--- a/SushiBar.sln
+++ b/SushiBar.sln
@@ -7,7 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SushiBarView", "SushiBarVie
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SushiBarDataModels", "SushiBarDataModels\SushiBarDataModels.csproj", "{4A5A85B2-9B70-4493-B550-0E29FE82E9FD}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SushiBarDatabaseImplement", "SushiBarDatabaseImplement\SushiBarDatabaseImplement.csproj", "{135C846B-59EC-4803-B07C-8991C60C57D6}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SushiBarDatabaseImplement", "SushiBarDatabaseImplement\SushiBarDatabaseImplement.csproj", "{135C846B-59EC-4803-B07C-8991C60C57D6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SushiBarContracts", "SushiBarContracts\SushiBarContracts.csproj", "{25C0DCD8-6A40-42C5-8459-00F6F085A8C6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -27,6 +29,10 @@ Global
{135C846B-59EC-4803-B07C-8991C60C57D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{135C846B-59EC-4803-B07C-8991C60C57D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{135C846B-59EC-4803-B07C-8991C60C57D6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {25C0DCD8-6A40-42C5-8459-00F6F085A8C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {25C0DCD8-6A40-42C5-8459-00F6F085A8C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {25C0DCD8-6A40-42C5-8459-00F6F085A8C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {25C0DCD8-6A40-42C5-8459-00F6F085A8C6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/SushiBarContracts/SushiBarContracts.csproj b/SushiBarContracts/SushiBarContracts.csproj
new file mode 100644
index 0000000..01dfc5c
--- /dev/null
+++ b/SushiBarContracts/SushiBarContracts.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
diff --git a/SushiBarContracts/ViewModels/ChequeItemViewModel.cs b/SushiBarContracts/ViewModels/ChequeItemViewModel.cs
new file mode 100644
index 0000000..c39e0d1
--- /dev/null
+++ b/SushiBarContracts/ViewModels/ChequeItemViewModel.cs
@@ -0,0 +1,22 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class ChequeItemViewModel
+ {
+ public int CheuqueId { get; set; }
+
+ public int DishId { get; set; }
+
+ [DisplayName("Название блюда")]
+ public string DishName { get; set; } = string.Empty;
+
+ public int CookId { get; set; }
+
+ [DisplayName("Повар")]
+ public string CookFio { get; set; } = string.Empty;
+
+ [DisplayName("Количество")]
+ public int Count { get; set; }
+ }
+}
diff --git a/SushiBarContracts/ViewModels/ChequeViewModel.cs b/SushiBarContracts/ViewModels/ChequeViewModel.cs
new file mode 100644
index 0000000..57db2bb
--- /dev/null
+++ b/SushiBarContracts/ViewModels/ChequeViewModel.cs
@@ -0,0 +1,27 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class ChequeViewModel
+ {
+ public int Id { get; set; }
+
+ public int? CustomerId { get; set; }
+
+ [DisplayName("Покупатель")]
+ public string? CustomerFio { get; set; } = string.Empty;
+
+ public Dictionary ChequeItems { get; set; } = new();
+
+ [DisplayName("Дата заказа")]
+ public DateTime OrderDate { get; set; }
+
+ [DisplayName("Сумма заказа")]
+ public double TotalSum { get; set; }
+
+ public int? PromotionId { get; set; }
+
+ [DisplayName("Скидка")]
+ public float? Discount { get; set; }
+ }
+}
diff --git a/SushiBarContracts/ViewModels/CookViewModel.cs b/SushiBarContracts/ViewModels/CookViewModel.cs
new file mode 100644
index 0000000..bcc6d5a
--- /dev/null
+++ b/SushiBarContracts/ViewModels/CookViewModel.cs
@@ -0,0 +1,15 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class CookViewModel
+ {
+ public int Id { get; set; }
+
+ [DisplayName("Инициалы повара")]
+ public string Fio { get; set; } = string.Empty;
+
+ [DisplayName("Дата приема на работу")]
+ public DateTime EmploymentDate { get; set; }
+ }
+}
diff --git a/SushiBarContracts/ViewModels/CustomerViewModel.cs b/SushiBarContracts/ViewModels/CustomerViewModel.cs
new file mode 100644
index 0000000..4e54205
--- /dev/null
+++ b/SushiBarContracts/ViewModels/CustomerViewModel.cs
@@ -0,0 +1,18 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class CustomerViewModel
+ {
+ public int Id { get; set; }
+
+ [DisplayName("Инициалы покупателя")]
+ public string Fio { get; set; } = string.Empty;
+
+ [DisplayName("Дата рождения")]
+ public DateTime? BirthdayDate { get; set; }
+
+ [DisplayName("Общая сумма всех заказов")]
+ public double SumOfAllOrders { get; set; }
+ }
+}
diff --git a/SushiBarContracts/ViewModels/DishIngredientViewModel.cs b/SushiBarContracts/ViewModels/DishIngredientViewModel.cs
new file mode 100644
index 0000000..e2822d1
--- /dev/null
+++ b/SushiBarContracts/ViewModels/DishIngredientViewModel.cs
@@ -0,0 +1,17 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class DishIngredientViewModel
+ {
+ public int DishId { get; set; }
+
+ public int IngredientId { get; set; }
+
+ [DisplayName("Наименование ингредиента")]
+ public string IngredientName { get; set; } = string.Empty;
+
+ [DisplayName("Количество")]
+ public int Count { get; set; }
+ }
+}
diff --git a/SushiBarContracts/ViewModels/DishViewModel.cs b/SushiBarContracts/ViewModels/DishViewModel.cs
new file mode 100644
index 0000000..cdea94b
--- /dev/null
+++ b/SushiBarContracts/ViewModels/DishViewModel.cs
@@ -0,0 +1,17 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class DishViewModel
+ {
+ public int Id { get; set; }
+
+ [DisplayName("Название блюда")]
+ public string DishName { get; set; } = string.Empty;
+
+ [DisplayName("Категория")]
+ public string Category { get; set; } = string.Empty;
+
+ public Dictionary Ingredients { get; set; } = new();
+ }
+}
diff --git a/SushiBarContracts/ViewModels/IngredientViewModel.cs b/SushiBarContracts/ViewModels/IngredientViewModel.cs
new file mode 100644
index 0000000..59760fa
--- /dev/null
+++ b/SushiBarContracts/ViewModels/IngredientViewModel.cs
@@ -0,0 +1,18 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class IngredientViewModel
+ {
+ public int Id { get; set; }
+
+ [DisplayName("Наименование ингредиента")]
+ public string IngredientName { get; set; } = string.Empty;
+
+ [DisplayName("Единицы измерения")]
+ public string Unit { get; set; } = string.Empty;
+
+ [DisplayName("Стоимость за единицу")]
+ public double Cost { get; set; }
+ }
+}
diff --git a/SushiBarContracts/ViewModels/PromotionViewModel.cs b/SushiBarContracts/ViewModels/PromotionViewModel.cs
new file mode 100644
index 0000000..dcf6d80
--- /dev/null
+++ b/SushiBarContracts/ViewModels/PromotionViewModel.cs
@@ -0,0 +1,18 @@
+using System.ComponentModel;
+
+namespace SushiBarContracts.ViewModels
+{
+ public class PromotionViewModel
+ {
+ public int Id { get; set; }
+
+ [DisplayName("Название акции")]
+ public string PromotionName { get; set; } = string.Empty;
+
+ [DisplayName("Размер скидки")]
+ public float Discount { get; set; }
+
+ [DisplayName("Минимальная сумма для применения")]
+ public double TriggeringSum { get; set; }
+ }
+}
diff --git a/SushiBarDatabaseImplement/Migrations/20240515165005_Initial.Designer.cs b/SushiBarDatabaseImplement/Migrations/20240515165005_Initial.Designer.cs
new file mode 100644
index 0000000..51c75a2
--- /dev/null
+++ b/SushiBarDatabaseImplement/Migrations/20240515165005_Initial.Designer.cs
@@ -0,0 +1,320 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using SushiBarDatabaseImplement;
+
+#nullable disable
+
+namespace SushiBarDatabaseImplement.Migrations
+{
+ [DbContext(typeof(SushiBarDatabase))]
+ [Migration("20240515165005_Initial")]
+ partial class Initial
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.19")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cheque", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CustomerId")
+ .HasColumnType("integer");
+
+ b.Property("OrderDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("PromotionId")
+ .HasColumnType("integer");
+
+ b.Property("TotalSum")
+ .HasColumnType("double precision");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CustomerId");
+
+ b.HasIndex("PromotionId");
+
+ b.ToTable("Cheques");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.ChequeItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChequeId")
+ .HasColumnType("integer");
+
+ b.Property("CookId")
+ .HasColumnType("integer");
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("DishId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ChequeId");
+
+ b.HasIndex("CookId");
+
+ b.HasIndex("DishId");
+
+ b.ToTable("ChequeItems");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cook", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("EmploymentDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("Fio")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Cooks");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Customer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("BirthdayDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("Fio")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SumOfAllOrders")
+ .HasColumnType("double precision");
+
+ b.HasKey("Id");
+
+ b.ToTable("Customers");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Dish", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Category")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("DishName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Dishes");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.DishIngredient", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("DishId")
+ .HasColumnType("integer");
+
+ b.Property("IngredientId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("DishId");
+
+ b.HasIndex("IngredientId");
+
+ b.ToTable("DishIngredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Ingredient", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Cost")
+ .HasColumnType("double precision");
+
+ b.Property("IngredientName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Unit")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Ingredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Promotion", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Discount")
+ .HasColumnType("real");
+
+ b.Property("PromotionName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("TriggeringSum")
+ .HasColumnType("double precision");
+
+ b.HasKey("Id");
+
+ b.ToTable("Promotions");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cheque", b =>
+ {
+ b.HasOne("SushiBarDatabaseImplement.Models.Customer", "Customer")
+ .WithMany("Cheques")
+ .HasForeignKey("CustomerId");
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Promotion", "Promotion")
+ .WithMany("Cheques")
+ .HasForeignKey("PromotionId");
+
+ b.Navigation("Customer");
+
+ b.Navigation("Promotion");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.ChequeItem", b =>
+ {
+ b.HasOne("SushiBarDatabaseImplement.Models.Cheque", "Cheque")
+ .WithMany("ChequeItems")
+ .HasForeignKey("ChequeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Cook", "Cook")
+ .WithMany("ChequeItems")
+ .HasForeignKey("CookId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Dish", "Dish")
+ .WithMany("ChequeItems")
+ .HasForeignKey("DishId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Cheque");
+
+ b.Navigation("Cook");
+
+ b.Navigation("Dish");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.DishIngredient", b =>
+ {
+ b.HasOne("SushiBarDatabaseImplement.Models.Dish", "Dish")
+ .WithMany("DishIngredients")
+ .HasForeignKey("DishId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Ingredient", "Ingredient")
+ .WithMany("DishIngredients")
+ .HasForeignKey("IngredientId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Dish");
+
+ b.Navigation("Ingredient");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cheque", b =>
+ {
+ b.Navigation("ChequeItems");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cook", b =>
+ {
+ b.Navigation("ChequeItems");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Customer", b =>
+ {
+ b.Navigation("Cheques");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Dish", b =>
+ {
+ b.Navigation("ChequeItems");
+
+ b.Navigation("DishIngredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Ingredient", b =>
+ {
+ b.Navigation("DishIngredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Promotion", b =>
+ {
+ b.Navigation("Cheques");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/SushiBarDatabaseImplement/Migrations/20240515165005_Initial.cs b/SushiBarDatabaseImplement/Migrations/20240515165005_Initial.cs
new file mode 100644
index 0000000..a6ba372
--- /dev/null
+++ b/SushiBarDatabaseImplement/Migrations/20240515165005_Initial.cs
@@ -0,0 +1,239 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace SushiBarDatabaseImplement.Migrations
+{
+ ///
+ public partial class Initial : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Cooks",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Fio = table.Column(type: "text", nullable: false),
+ EmploymentDate = table.Column(type: "timestamp without time zone", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Cooks", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Customers",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Fio = table.Column(type: "text", nullable: false),
+ BirthdayDate = table.Column(type: "timestamp without time zone", nullable: false),
+ SumOfAllOrders = table.Column(type: "double precision", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Customers", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Dishes",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ DishName = table.Column(type: "text", nullable: false),
+ Category = table.Column(type: "text", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Dishes", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Ingredients",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ IngredientName = table.Column(type: "text", nullable: false),
+ Unit = table.Column(type: "text", nullable: false),
+ Cost = table.Column(type: "double precision", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Ingredients", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Promotions",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ PromotionName = table.Column(type: "text", nullable: false),
+ Discount = table.Column(type: "real", nullable: false),
+ TriggeringSum = table.Column(type: "double precision", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Promotions", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "DishIngredients",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ DishId = table.Column(type: "integer", nullable: false),
+ IngredientId = table.Column(type: "integer", nullable: false),
+ Count = table.Column(type: "integer", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_DishIngredients", x => x.Id);
+ table.ForeignKey(
+ name: "FK_DishIngredients_Dishes_DishId",
+ column: x => x.DishId,
+ principalTable: "Dishes",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_DishIngredients_Ingredients_IngredientId",
+ column: x => x.IngredientId,
+ principalTable: "Ingredients",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Cheques",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ CustomerId = table.Column(type: "integer", nullable: true),
+ OrderDate = table.Column(type: "timestamp without time zone", nullable: false),
+ TotalSum = table.Column(type: "double precision", nullable: false),
+ PromotionId = table.Column(type: "integer", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Cheques", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Cheques_Customers_CustomerId",
+ column: x => x.CustomerId,
+ principalTable: "Customers",
+ principalColumn: "Id");
+ table.ForeignKey(
+ name: "FK_Cheques_Promotions_PromotionId",
+ column: x => x.PromotionId,
+ principalTable: "Promotions",
+ principalColumn: "Id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "ChequeItems",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ ChequeId = table.Column(type: "integer", nullable: false),
+ DishId = table.Column(type: "integer", nullable: false),
+ CookId = table.Column(type: "integer", nullable: false),
+ Count = table.Column(type: "integer", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ChequeItems", x => x.Id);
+ table.ForeignKey(
+ name: "FK_ChequeItems_Cheques_ChequeId",
+ column: x => x.ChequeId,
+ principalTable: "Cheques",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_ChequeItems_Cooks_CookId",
+ column: x => x.CookId,
+ principalTable: "Cooks",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_ChequeItems_Dishes_DishId",
+ column: x => x.DishId,
+ principalTable: "Dishes",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ChequeItems_ChequeId",
+ table: "ChequeItems",
+ column: "ChequeId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ChequeItems_CookId",
+ table: "ChequeItems",
+ column: "CookId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ChequeItems_DishId",
+ table: "ChequeItems",
+ column: "DishId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Cheques_CustomerId",
+ table: "Cheques",
+ column: "CustomerId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Cheques_PromotionId",
+ table: "Cheques",
+ column: "PromotionId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_DishIngredients_DishId",
+ table: "DishIngredients",
+ column: "DishId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_DishIngredients_IngredientId",
+ table: "DishIngredients",
+ column: "IngredientId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "ChequeItems");
+
+ migrationBuilder.DropTable(
+ name: "DishIngredients");
+
+ migrationBuilder.DropTable(
+ name: "Cheques");
+
+ migrationBuilder.DropTable(
+ name: "Cooks");
+
+ migrationBuilder.DropTable(
+ name: "Dishes");
+
+ migrationBuilder.DropTable(
+ name: "Ingredients");
+
+ migrationBuilder.DropTable(
+ name: "Customers");
+
+ migrationBuilder.DropTable(
+ name: "Promotions");
+ }
+ }
+}
diff --git a/SushiBarDatabaseImplement/Migrations/SushiBarDatabaseModelSnapshot.cs b/SushiBarDatabaseImplement/Migrations/SushiBarDatabaseModelSnapshot.cs
new file mode 100644
index 0000000..d3f1fa3
--- /dev/null
+++ b/SushiBarDatabaseImplement/Migrations/SushiBarDatabaseModelSnapshot.cs
@@ -0,0 +1,317 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using SushiBarDatabaseImplement;
+
+#nullable disable
+
+namespace SushiBarDatabaseImplement.Migrations
+{
+ [DbContext(typeof(SushiBarDatabase))]
+ partial class SushiBarDatabaseModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.19")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cheque", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CustomerId")
+ .HasColumnType("integer");
+
+ b.Property("OrderDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("PromotionId")
+ .HasColumnType("integer");
+
+ b.Property("TotalSum")
+ .HasColumnType("double precision");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CustomerId");
+
+ b.HasIndex("PromotionId");
+
+ b.ToTable("Cheques");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.ChequeItem", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ChequeId")
+ .HasColumnType("integer");
+
+ b.Property("CookId")
+ .HasColumnType("integer");
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("DishId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ChequeId");
+
+ b.HasIndex("CookId");
+
+ b.HasIndex("DishId");
+
+ b.ToTable("ChequeItems");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cook", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("EmploymentDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("Fio")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Cooks");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Customer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("BirthdayDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("Fio")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SumOfAllOrders")
+ .HasColumnType("double precision");
+
+ b.HasKey("Id");
+
+ b.ToTable("Customers");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Dish", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Category")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("DishName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Dishes");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.DishIngredient", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("DishId")
+ .HasColumnType("integer");
+
+ b.Property("IngredientId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("DishId");
+
+ b.HasIndex("IngredientId");
+
+ b.ToTable("DishIngredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Ingredient", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Cost")
+ .HasColumnType("double precision");
+
+ b.Property("IngredientName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Unit")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Ingredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Promotion", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Discount")
+ .HasColumnType("real");
+
+ b.Property("PromotionName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("TriggeringSum")
+ .HasColumnType("double precision");
+
+ b.HasKey("Id");
+
+ b.ToTable("Promotions");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cheque", b =>
+ {
+ b.HasOne("SushiBarDatabaseImplement.Models.Customer", "Customer")
+ .WithMany("Cheques")
+ .HasForeignKey("CustomerId");
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Promotion", "Promotion")
+ .WithMany("Cheques")
+ .HasForeignKey("PromotionId");
+
+ b.Navigation("Customer");
+
+ b.Navigation("Promotion");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.ChequeItem", b =>
+ {
+ b.HasOne("SushiBarDatabaseImplement.Models.Cheque", "Cheque")
+ .WithMany("ChequeItems")
+ .HasForeignKey("ChequeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Cook", "Cook")
+ .WithMany("ChequeItems")
+ .HasForeignKey("CookId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Dish", "Dish")
+ .WithMany("ChequeItems")
+ .HasForeignKey("DishId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Cheque");
+
+ b.Navigation("Cook");
+
+ b.Navigation("Dish");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.DishIngredient", b =>
+ {
+ b.HasOne("SushiBarDatabaseImplement.Models.Dish", "Dish")
+ .WithMany("DishIngredients")
+ .HasForeignKey("DishId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("SushiBarDatabaseImplement.Models.Ingredient", "Ingredient")
+ .WithMany("DishIngredients")
+ .HasForeignKey("IngredientId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Dish");
+
+ b.Navigation("Ingredient");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cheque", b =>
+ {
+ b.Navigation("ChequeItems");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Cook", b =>
+ {
+ b.Navigation("ChequeItems");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Customer", b =>
+ {
+ b.Navigation("Cheques");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Dish", b =>
+ {
+ b.Navigation("ChequeItems");
+
+ b.Navigation("DishIngredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Ingredient", b =>
+ {
+ b.Navigation("DishIngredients");
+ });
+
+ modelBuilder.Entity("SushiBarDatabaseImplement.Models.Promotion", b =>
+ {
+ b.Navigation("Cheques");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/SushiBarDatabaseImplement/Models/Cheque.cs b/SushiBarDatabaseImplement/Models/Cheque.cs
index f12ceee..738309f 100644
--- a/SushiBarDatabaseImplement/Models/Cheque.cs
+++ b/SushiBarDatabaseImplement/Models/Cheque.cs
@@ -22,7 +22,7 @@ namespace SushiBarDatabaseImplement.Models
public virtual Promotion? Promotion { get; set; }
- [ForeignKey("Cheque")]
- public List ChequeItems { get; set; } = new();
+ [ForeignKey("ChequeId")]
+ public virtual List ChequeItems { get; set; } = new();
}
}
diff --git a/SushiBarDatabaseImplement/Models/Cook.cs b/SushiBarDatabaseImplement/Models/Cook.cs
index d02e8f7..bd662d2 100644
--- a/SushiBarDatabaseImplement/Models/Cook.cs
+++ b/SushiBarDatabaseImplement/Models/Cook.cs
@@ -15,6 +15,6 @@ namespace SushiBarDatabaseImplement.Models
public DateTime EmploymentDate { get; set; }
[ForeignKey("CookId")]
- public List ChequeItems { get; set; } = new();
+ public virtual List ChequeItems { get; set; } = new();
}
}
diff --git a/SushiBarDatabaseImplement/Models/Customer.cs b/SushiBarDatabaseImplement/Models/Customer.cs
index 2f38f86..0109d4c 100644
--- a/SushiBarDatabaseImplement/Models/Customer.cs
+++ b/SushiBarDatabaseImplement/Models/Customer.cs
@@ -18,6 +18,6 @@ namespace SushiBarDatabaseImplement.Models
public double SumOfAllOrders { get; set; }
[ForeignKey("CustomerId")]
- public List Cheques { get; set; } = new();
+ public virtual List Cheques { get; set; } = new();
}
}
diff --git a/SushiBarDatabaseImplement/Models/Dish.cs b/SushiBarDatabaseImplement/Models/Dish.cs
index e074a0c..2f277d7 100644
--- a/SushiBarDatabaseImplement/Models/Dish.cs
+++ b/SushiBarDatabaseImplement/Models/Dish.cs
@@ -18,6 +18,6 @@ namespace SushiBarDatabaseImplement.Models
public virtual List DishIngredients { get; set; } = new();
[ForeignKey("DishId")]
- public List ChequeItems { get; set; } = new();
+ public virtual List ChequeItems { get; set; } = new();
}
}
diff --git a/SushiBarDatabaseImplement/Models/Promotion.cs b/SushiBarDatabaseImplement/Models/Promotion.cs
index d70bdae..c198c53 100644
--- a/SushiBarDatabaseImplement/Models/Promotion.cs
+++ b/SushiBarDatabaseImplement/Models/Promotion.cs
@@ -18,6 +18,6 @@ namespace SushiBarDatabaseImplement.Models
public double TriggeringSum { get; set; }
[ForeignKey("PromotionId")]
- public List Cheques { get; set; } = new();
+ public virtual List Cheques { get; set; } = new();
}
}
diff --git a/SushiBarDatabaseImplement/Storages/IngredientStorage.cs b/SushiBarDatabaseImplement/Storages/IngredientStorage.cs
new file mode 100644
index 0000000..f9e9112
--- /dev/null
+++ b/SushiBarDatabaseImplement/Storages/IngredientStorage.cs
@@ -0,0 +1,7 @@
+namespace SushiBarDatabaseImplement.Storages
+{
+ public class IngredientStorage
+ {
+ public List<>
+ }
+}
diff --git a/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj b/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj
index 12c5ac5..ca3e10d 100644
--- a/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj
+++ b/SushiBarDatabaseImplement/SushiBarDatabaseImplement.csproj
@@ -12,7 +12,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/SushiBarView/SushiBarView.csproj b/SushiBarView/SushiBarView.csproj
index b57c89e..c3d2ab9 100644
--- a/SushiBarView/SushiBarView.csproj
+++ b/SushiBarView/SushiBarView.csproj
@@ -8,4 +8,15 @@
enable
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
\ No newline at end of file