diff --git a/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/OrderLogic.cs b/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/OrderLogic.cs index 20e438b..b67ca3a 100644 --- a/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/OrderLogic.cs +++ b/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/OrderLogic.cs @@ -78,24 +78,30 @@ namespace PizzeriaBusinessLogic.BusinessLogics } public bool DeliveryOrder(OrderBindingModel model) { - var order = _orderStorage.GetElement(new OrderSearchModel + lock (_locker) { - Id = model.Id, - }); - if (order == null) - { - throw new ArgumentNullException(nameof(order)); + model = FillOrderBindingModel(model); + if (model.Status != OrderStatus.Готов && model.Status != OrderStatus.Ожидает) + { + _logger.LogWarning("Changing status operation faled: Current-{Status}:required-Выдан.", model.Status); + throw new InvalidOperationException($"Невозможно приствоить статус выдан заказу с текущим статусом {model.Status}"); + } + if (!_shopStorage.RestockingShops(new SupplyBindingModel + { + PizzaId = model.PizzaId, + Count = model.Count + })) + { + if (model.Status == OrderStatus.Готов) + { + model.Status = OrderStatus.Ожидает; + UpdateOrder(model); + } + throw new ArgumentException("Недостаточно места в магазинах для поставки"); + } + model.Status = OrderStatus.Выдан; + return UpdateOrder(model); } - if (!_shopStorage.RestockingShops(new SupplyBindingModel - { - PizzaId = order.PizzaId, - Count = order.Count - })) - { - throw new ArgumentException("Недостаточно места"); - } - - return ChangeStatus(model, OrderStatus.Выдан); } private void CheckModel(OrderBindingModel model, bool withParams = true) { @@ -123,38 +129,52 @@ namespace PizzeriaBusinessLogic.BusinessLogics model.PizzaId, model.Count,model.Sum, model.Id); } private bool ChangeStatus(OrderBindingModel model, OrderStatus requiredStatus) { + model = FillOrderBindingModel(model); + + if (requiredStatus - model.Status == 1) + { + model.Status = requiredStatus; + if (model.Status == OrderStatus.Готов) + model.DateImplement = DateTime.Now; + return UpdateOrder(model); + } + _logger.LogWarning("Changing status operation faled: Current-{Status}:required-{requiredStatus}.", model.Status, requiredStatus); + throw new InvalidOperationException($"Невозможно приствоить статус {requiredStatus} заказу с текущим статусом {model.Status}"); + + } + + private OrderBindingModel FillOrderBindingModel(OrderBindingModel model) + { CheckModel(model, false); var element = _orderStorage.GetElement(new OrderSearchModel() { Id = model.Id }); - if(element == null) + if (element == null) { throw new InvalidOperationException(nameof(element)); } + model.Id = element.Id; model.DateCreate = element.DateCreate; model.PizzaId = element.PizzaId; model.DateImplement = element.DateImplement; model.ClientId = element.ClientId; - if (!model.ImplementerId.HasValue) - model.ImplementerId = element.ImplementerId; model.Status = element.Status; model.Count = element.Count; model.Sum = element.Sum; - if(requiredStatus - model.Status == 1) + if (!model.ImplementerId.HasValue) + model.ImplementerId = element.ImplementerId; + return model; + } + private bool UpdateOrder(OrderBindingModel model) + { + if (_orderStorage.Update(model) == null) { - model.Status = requiredStatus; - if(model.Status == OrderStatus.Готов) - model.DateImplement = DateTime.Now; - if (_orderStorage.Update(model) == null) - { - _logger.LogWarning("Update operation failed"); - return false; - } - return true; + _logger.LogWarning("Update operation failed"); + return false; } - _logger.LogWarning("Changing status operation faled: Current-{Status}:required-{requiredStatus}.", model.Status, requiredStatus); - throw new InvalidOperationException($"Невозможно приствоить статус {requiredStatus} заказу с текущим статусом {model.Status}"); + _logger.LogWarning("Update operation sucsess"); + return true; } } } diff --git a/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/WorkModeling.cs b/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/WorkModeling.cs index bba2aa0..75b9023 100644 --- a/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/WorkModeling.cs +++ b/Pizzeria/PizzeriaBusinessLogic/BusinessLogics/WorkModeling.cs @@ -35,8 +35,9 @@ namespace PizzeriaBusinessLogic.BusinessLogics _logger.LogWarning("DoWork. Implementers is null"); return; } - var orders = _orderLogic.ReadList(new OrderSearchModel { Status = OrderStatus.Принят }); - if (orders == null || orders.Count == 0) + var orders = _orderLogic.ReadList(new OrderSearchModel { Status = OrderStatus.Выдан }); + int count = _orderLogic.ReadList(new OrderSearchModel()).Count; + if (orders == null || count == orders.Count) { _logger.LogWarning("DoWork. Orders is null or empty"); return; @@ -59,6 +60,7 @@ namespace PizzeriaBusinessLogic.BusinessLogics { return; } + await DeliverWaitingOrder(implementer); await RunOrderInWork(implementer); await Task.Run(() => @@ -81,6 +83,7 @@ namespace PizzeriaBusinessLogic.BusinessLogics { Id = order.Id }); + _orderLogic.DeliveryOrder(new OrderBindingModel { Id = order.Id }); } // кто-то мог уже перехватить заказ, игнорируем ошибку catch (InvalidOperationException ex) @@ -130,6 +133,7 @@ namespace PizzeriaBusinessLogic.BusinessLogics { Id = runOrder.Id }); + _orderLogic.DeliveryOrder(new OrderBindingModel { Id = runOrder.Id }); // отдыхаем Thread.Sleep(implementer.Qualification * _rnd.Next(10, 100)); } @@ -145,5 +149,47 @@ namespace PizzeriaBusinessLogic.BusinessLogics throw; } } + + private async Task DeliverWaitingOrder(ImplementerViewModel implementer) + { + if (_orderLogic == null || implementer == null) + { + return; + } + var waitingOrders = await Task.Run(() => _orderLogic.ReadList(new OrderSearchModel + { + ImplementerId = implementer.Id, + Status = OrderStatus.Ожидает + })) ; + if (waitingOrders == null || waitingOrders.Count == 0) + { + return; + } + _logger.LogInformation("DeliverWaitingOrder. Find some waitig order for implementer:{id}.Count:{count}", implementer.Id, waitingOrders.Count); + foreach (var waitingOrder in waitingOrders) + { + try + { + _logger.LogInformation("DeliverWaitingOrder. Trying to deliver order id:{id}", waitingOrder.Id); + var res = _orderLogic.DeliveryOrder(new OrderBindingModel + { + Id = waitingOrder.Id + }); + } + catch (ArgumentException ex) + { + _logger.LogWarning(ex, "DeliverWaitingOrder. Fault"); + } + catch (InvalidOperationException ex) + { + _logger.LogWarning(ex, "Error try deliver order"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error while do work"); + throw; + } + } + } } } diff --git a/Pizzeria/PizzeriaDataModels/Enums/OrderStatus.cs b/Pizzeria/PizzeriaDataModels/Enums/OrderStatus.cs index 6c6a4fc..fff698f 100644 --- a/Pizzeria/PizzeriaDataModels/Enums/OrderStatus.cs +++ b/Pizzeria/PizzeriaDataModels/Enums/OrderStatus.cs @@ -12,6 +12,7 @@ namespace PizzeriaDataModels.Enums Принят = 0, Выполняется = 1, Готов = 2, - Выдан = 3 + Ожидает = 3, + Выдан = 4 } } diff --git a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230418063952_implementors.Designer.cs b/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230418063952_implementors.Designer.cs deleted file mode 100644 index 3b62ad2..0000000 --- a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230418063952_implementors.Designer.cs +++ /dev/null @@ -1,266 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using PizzeriaDatabaseImplement; - -#nullable disable - -namespace PizzeriaDatabaseImplement.Migrations -{ - [DbContext(typeof(PizzeriaDatabase))] - [Migration("20230418063952_implementors")] - partial class implementors - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Client", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Component", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ComponentName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Cost") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("Components"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Implementer", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ImplementerFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Qualification") - .HasColumnType("int"); - - b.Property("WorkExperience") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Implementers"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClientId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("DateImplement") - .HasColumnType("datetime2"); - - b.Property("ImplementerId") - .HasColumnType("int"); - - b.Property("PizzaId") - .HasColumnType("int"); - - b.Property("Status") - .HasColumnType("int"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("ImplementerId"); - - b.HasIndex("PizzaId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Pizza", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("PizzaName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("Id"); - - b.ToTable("Pizzas"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.PizzaComponent", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ClientId") - .HasColumnType("int"); - - b.Property("ComponentId") - .HasColumnType("int"); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("PizzaId") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("ClientId"); - - b.HasIndex("ComponentId"); - - b.HasIndex("PizzaId"); - - b.ToTable("PizzaComponents"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Order", b => - { - b.HasOne("PizzeriaDatabaseImplement.Models.Client", "Client") - .WithMany() - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PizzeriaDatabaseImplement.Models.Implementer", "Implementer") - .WithMany("Order") - .HasForeignKey("ImplementerId"); - - b.HasOne("PizzeriaDatabaseImplement.Models.Pizza", "Pizza") - .WithMany("Orders") - .HasForeignKey("PizzaId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Client"); - - b.Navigation("Implementer"); - - b.Navigation("Pizza"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.PizzaComponent", b => - { - b.HasOne("PizzeriaDatabaseImplement.Models.Client", null) - .WithMany("Components") - .HasForeignKey("ClientId"); - - b.HasOne("PizzeriaDatabaseImplement.Models.Component", "Component") - .WithMany("PizzaComponents") - .HasForeignKey("ComponentId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("PizzeriaDatabaseImplement.Models.Pizza", "Pizza") - .WithMany("Components") - .HasForeignKey("PizzaId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Component"); - - b.Navigation("Pizza"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Client", b => - { - b.Navigation("Components"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Component", b => - { - b.Navigation("PizzaComponents"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Implementer", b => - { - b.Navigation("Order"); - }); - - modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Pizza", b => - { - b.Navigation("Components"); - - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230418063952_implementors.cs b/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230418063952_implementors.cs deleted file mode 100644 index 471b99e..0000000 --- a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230418063952_implementors.cs +++ /dev/null @@ -1,196 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace PizzeriaDatabaseImplement.Migrations -{ - /// - public partial class implementors : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Clients", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ClientFIO = table.Column(type: "nvarchar(max)", nullable: false), - Email = table.Column(type: "nvarchar(max)", nullable: false), - Password = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Clients", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Components", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ComponentName = table.Column(type: "nvarchar(max)", nullable: false), - Cost = table.Column(type: "float", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Components", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Implementers", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ImplementerFIO = table.Column(type: "nvarchar(max)", nullable: false), - Password = table.Column(type: "nvarchar(max)", nullable: false), - WorkExperience = table.Column(type: "int", nullable: false), - Qualification = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Implementers", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Pizzas", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - PizzaName = table.Column(type: "nvarchar(max)", nullable: false), - Price = table.Column(type: "float", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Pizzas", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Orders", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ClientId = table.Column(type: "int", nullable: false), - PizzaId = table.Column(type: "int", nullable: false), - ImplementerId = table.Column(type: "int", nullable: true), - Count = table.Column(type: "int", nullable: false), - Sum = table.Column(type: "float", nullable: false), - Status = table.Column(type: "int", nullable: false), - DateCreate = table.Column(type: "datetime2", nullable: false), - DateImplement = table.Column(type: "datetime2", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Orders", x => x.Id); - table.ForeignKey( - name: "FK_Orders_Clients_ClientId", - column: x => x.ClientId, - principalTable: "Clients", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_Orders_Implementers_ImplementerId", - column: x => x.ImplementerId, - principalTable: "Implementers", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_Orders_Pizzas_PizzaId", - column: x => x.PizzaId, - principalTable: "Pizzas", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "PizzaComponents", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - PizzaId = table.Column(type: "int", nullable: false), - ComponentId = table.Column(type: "int", nullable: false), - Count = table.Column(type: "int", nullable: false), - ClientId = table.Column(type: "int", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_PizzaComponents", x => x.Id); - table.ForeignKey( - name: "FK_PizzaComponents_Clients_ClientId", - column: x => x.ClientId, - principalTable: "Clients", - principalColumn: "Id"); - table.ForeignKey( - name: "FK_PizzaComponents_Components_ComponentId", - column: x => x.ComponentId, - principalTable: "Components", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_PizzaComponents_Pizzas_PizzaId", - column: x => x.PizzaId, - principalTable: "Pizzas", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_Orders_ClientId", - table: "Orders", - column: "ClientId"); - - migrationBuilder.CreateIndex( - name: "IX_Orders_ImplementerId", - table: "Orders", - column: "ImplementerId"); - - migrationBuilder.CreateIndex( - name: "IX_Orders_PizzaId", - table: "Orders", - column: "PizzaId"); - - migrationBuilder.CreateIndex( - name: "IX_PizzaComponents_ClientId", - table: "PizzaComponents", - column: "ClientId"); - - migrationBuilder.CreateIndex( - name: "IX_PizzaComponents_ComponentId", - table: "PizzaComponents", - column: "ComponentId"); - - migrationBuilder.CreateIndex( - name: "IX_PizzaComponents_PizzaId", - table: "PizzaComponents", - column: "PizzaId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Orders"); - - migrationBuilder.DropTable( - name: "PizzaComponents"); - - migrationBuilder.DropTable( - name: "Implementers"); - - migrationBuilder.DropTable( - name: "Clients"); - - migrationBuilder.DropTable( - name: "Components"); - - migrationBuilder.DropTable( - name: "Pizzas"); - } - } -} diff --git a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503183159_init.Designer.cs b/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503204906_init.Designer.cs similarity index 86% rename from Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503183159_init.Designer.cs rename to Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503204906_init.Designer.cs index e834a0b..45dc7af 100644 --- a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503183159_init.Designer.cs +++ b/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503204906_init.Designer.cs @@ -12,7 +12,7 @@ using PizzeriaDatabaseImplement; namespace PizzeriaDatabaseImplement.Migrations { [DbContext(typeof(PizzeriaDatabase))] - [Migration("20230503183159_init")] + [Migration("20230503204906_init")] partial class init { /// @@ -70,6 +70,33 @@ namespace PizzeriaDatabaseImplement.Migrations b.ToTable("Components"); }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Implementer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ImplementerFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Qualification") + .HasColumnType("int"); + + b.Property("WorkExperience") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Implementers"); + }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Order", b => { b.Property("Id") @@ -90,6 +117,9 @@ namespace PizzeriaDatabaseImplement.Migrations b.Property("DateImplement") .HasColumnType("datetime2"); + b.Property("ImplementerId") + .HasColumnType("int"); + b.Property("PizzaId") .HasColumnType("int"); @@ -103,6 +133,8 @@ namespace PizzeriaDatabaseImplement.Migrations b.HasIndex("ClientId"); + b.HasIndex("ImplementerId"); + b.HasIndex("PizzaId"); b.ToTable("Orders"); @@ -220,6 +252,10 @@ namespace PizzeriaDatabaseImplement.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("PizzeriaDatabaseImplement.Models.Implementer", "Implementer") + .WithMany("Order") + .HasForeignKey("ImplementerId"); + b.HasOne("PizzeriaDatabaseImplement.Models.Pizza", "Pizza") .WithMany("Orders") .HasForeignKey("PizzaId") @@ -228,6 +264,8 @@ namespace PizzeriaDatabaseImplement.Migrations b.Navigation("Client"); + b.Navigation("Implementer"); + b.Navigation("Pizza"); }); @@ -283,6 +321,11 @@ namespace PizzeriaDatabaseImplement.Migrations b.Navigation("PizzaComponents"); }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Implementer", b => + { + b.Navigation("Order"); + }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Pizza", b => { b.Navigation("Components"); diff --git a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503183159_init.cs b/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503204906_init.cs similarity index 87% rename from Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503183159_init.cs rename to Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503204906_init.cs index 86bf874..3a73afa 100644 --- a/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503183159_init.cs +++ b/Pizzeria/PizzeriaDatabaseImplement/Migrations/20230503204906_init.cs @@ -40,6 +40,22 @@ namespace PizzeriaDatabaseImplement.Migrations table.PrimaryKey("PK_Components", x => x.Id); }); + migrationBuilder.CreateTable( + name: "Implementers", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ImplementerFIO = table.Column(type: "nvarchar(max)", nullable: false), + Password = table.Column(type: "nvarchar(max)", nullable: false), + WorkExperience = table.Column(type: "int", nullable: false), + Qualification = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Implementers", x => x.Id); + }); + migrationBuilder.CreateTable( name: "Pizzas", columns: table => new @@ -78,6 +94,7 @@ namespace PizzeriaDatabaseImplement.Migrations .Annotation("SqlServer:Identity", "1, 1"), ClientId = table.Column(type: "int", nullable: false), PizzaId = table.Column(type: "int", nullable: false), + ImplementerId = table.Column(type: "int", nullable: true), Count = table.Column(type: "int", nullable: false), Sum = table.Column(type: "float", nullable: false), Status = table.Column(type: "int", nullable: false), @@ -93,6 +110,11 @@ namespace PizzeriaDatabaseImplement.Migrations principalTable: "Clients", principalColumn: "Id", onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Orders_Implementers_ImplementerId", + column: x => x.ImplementerId, + principalTable: "Implementers", + principalColumn: "Id"); table.ForeignKey( name: "FK_Orders_Pizzas_PizzaId", column: x => x.PizzaId, @@ -166,6 +188,11 @@ namespace PizzeriaDatabaseImplement.Migrations table: "Orders", column: "ClientId"); + migrationBuilder.CreateIndex( + name: "IX_Orders_ImplementerId", + table: "Orders", + column: "ImplementerId"); + migrationBuilder.CreateIndex( name: "IX_Orders_PizzaId", table: "Orders", @@ -209,6 +236,9 @@ namespace PizzeriaDatabaseImplement.Migrations migrationBuilder.DropTable( name: "ShopPizzas"); + migrationBuilder.DropTable( + name: "Implementers"); + migrationBuilder.DropTable( name: "Clients"); diff --git a/Pizzeria/PizzeriaDatabaseImplement/Migrations/PizzeriaDatabaseModelSnapshot.cs b/Pizzeria/PizzeriaDatabaseImplement/Migrations/PizzeriaDatabaseModelSnapshot.cs index 5b041a4..91bee3d 100644 --- a/Pizzeria/PizzeriaDatabaseImplement/Migrations/PizzeriaDatabaseModelSnapshot.cs +++ b/Pizzeria/PizzeriaDatabaseImplement/Migrations/PizzeriaDatabaseModelSnapshot.cs @@ -67,6 +67,33 @@ namespace PizzeriaDatabaseImplement.Migrations b.ToTable("Components"); }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Implementer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ImplementerFIO") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Password") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Qualification") + .HasColumnType("int"); + + b.Property("WorkExperience") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Implementers"); + }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Order", b => { b.Property("Id") @@ -87,6 +114,9 @@ namespace PizzeriaDatabaseImplement.Migrations b.Property("DateImplement") .HasColumnType("datetime2"); + b.Property("ImplementerId") + .HasColumnType("int"); + b.Property("PizzaId") .HasColumnType("int"); @@ -100,6 +130,8 @@ namespace PizzeriaDatabaseImplement.Migrations b.HasIndex("ClientId"); + b.HasIndex("ImplementerId"); + b.HasIndex("PizzaId"); b.ToTable("Orders"); @@ -217,6 +249,10 @@ namespace PizzeriaDatabaseImplement.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("PizzeriaDatabaseImplement.Models.Implementer", "Implementer") + .WithMany("Order") + .HasForeignKey("ImplementerId"); + b.HasOne("PizzeriaDatabaseImplement.Models.Pizza", "Pizza") .WithMany("Orders") .HasForeignKey("PizzaId") @@ -225,6 +261,8 @@ namespace PizzeriaDatabaseImplement.Migrations b.Navigation("Client"); + b.Navigation("Implementer"); + b.Navigation("Pizza"); }); @@ -280,6 +318,11 @@ namespace PizzeriaDatabaseImplement.Migrations b.Navigation("PizzaComponents"); }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Implementer", b => + { + b.Navigation("Order"); + }); + modelBuilder.Entity("PizzeriaDatabaseImplement.Models.Pizza", b => { b.Navigation("Components");