diff --git a/HardwareShop/HardwareShopDatabaseImplement/Implements/Storekeeper/ComponentStorage.cs b/HardwareShop/HardwareShopDatabaseImplement/Implements/Storekeeper/ComponentStorage.cs index c138f79..2f58171 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Implements/Storekeeper/ComponentStorage.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Implements/Storekeeper/ComponentStorage.cs @@ -85,7 +85,7 @@ namespace HardwareShopDatabaseImplement.Implements.Storekeeper public ComponentViewModel? Insert(ComponentBindingModel model) { using var context = new HardwareShopDatabase(); - var newComponent = Component.Create(context, model); + var newComponent = Component.Create(model); if (newComponent == null) { return null; diff --git a/HardwareShop/HardwareShopDatabaseImplement/Migrations/20230402135808_init.Designer.cs b/HardwareShop/HardwareShopDatabaseImplement/Migrations/20230402135808_init.Designer.cs new file mode 100644 index 0000000..a3d0a51 --- /dev/null +++ b/HardwareShop/HardwareShopDatabaseImplement/Migrations/20230402135808_init.Designer.cs @@ -0,0 +1,508 @@ +// +using System; +using HardwareShopDatabaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace HardwareShopDatabaseImplement.Migrations +{ + [DbContext(typeof(HardwareShopDatabase))] + [Migration("20230402135808_init")] + partial class init + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.ComponentBuild", b => + { + b.Property("ComponentId") + .HasColumnType("integer"); + + b.Property("BuildId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("ComponentId", "BuildId"); + + b.HasIndex("BuildId"); + + b.ToTable("ComponentsBuilds"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.GoodComponent", b => + { + b.Property("GoodId") + .HasColumnType("integer"); + + b.Property("ComponentId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("GoodId", "ComponentId"); + + b.HasIndex("ComponentId"); + + b.ToTable("GoodsComponents"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseBuild", b => + { + b.Property("PurchaseId") + .HasColumnType("integer"); + + b.Property("BuildId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("PurchaseId", "BuildId"); + + b.HasIndex("BuildId"); + + b.ToTable("PurchasesBuilds"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseGood", b => + { + b.Property("PurchaseId") + .HasColumnType("integer"); + + b.Property("GoodId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("PurchaseId", "GoodId"); + + b.HasIndex("GoodId"); + + b.ToTable("PurchasesGoods"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Component", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ComponentName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Cost") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Components"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Good", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("GoodName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Price") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Goods"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("DateCreate") + .HasColumnType("timestamp with time zone"); + + b.Property("DateImplement") + .HasColumnType("timestamp with time zone"); + + b.Property("GoodId") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Sum") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GoodId"); + + b.HasIndex("UserId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("Login") + .IsRequired() + .HasColumnType("text"); + + b.Property("Password") + .IsRequired() + .HasColumnType("text"); + + b.Property("Role") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("Email") + .IsUnique(); + + b.HasIndex("Login") + .IsUnique(); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Build", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BuildName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Price") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Builds"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BuildId") + .HasColumnType("integer"); + + b.Property("Text") + .IsRequired() + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("BuildId"); + + b.HasIndex("UserId"); + + b.ToTable("Comments"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Purchase", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DatePurchase") + .HasColumnType("timestamp with time zone"); + + b.Property("PurchaseStatus") + .HasColumnType("integer"); + + b.Property("Sum") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.ComponentBuild", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Build", "Build") + .WithMany("Components") + .HasForeignKey("BuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Component", "Component") + .WithMany("Builds") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Build"); + + b.Navigation("Component"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.GoodComponent", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Component", "Component") + .WithMany("Goods") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Good", "Good") + .WithMany("Components") + .HasForeignKey("GoodId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Component"); + + b.Navigation("Good"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseBuild", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Build", "Build") + .WithMany("Purchases") + .HasForeignKey("BuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Purchase", "Purchase") + .WithMany("Builds") + .HasForeignKey("PurchaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Build"); + + b.Navigation("Purchase"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseGood", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Good", "Good") + .WithMany("Purchases") + .HasForeignKey("GoodId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Purchase", "Purchase") + .WithMany("Goods") + .HasForeignKey("PurchaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Good"); + + b.Navigation("Purchase"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Component", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Components") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Good", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Goods") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Order", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Good", "Good") + .WithMany("Orders") + .HasForeignKey("GoodId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Orders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Good"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Build", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Builds") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Comment", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Build", "Build") + .WithMany("Comments") + .HasForeignKey("BuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Comments") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Build"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Purchase", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Purchases") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Component", b => + { + b.Navigation("Builds"); + + b.Navigation("Goods"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Good", b => + { + b.Navigation("Components"); + + b.Navigation("Orders"); + + b.Navigation("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.User", b => + { + b.Navigation("Builds"); + + b.Navigation("Comments"); + + b.Navigation("Components"); + + b.Navigation("Goods"); + + b.Navigation("Orders"); + + b.Navigation("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Build", b => + { + b.Navigation("Comments"); + + b.Navigation("Components"); + + b.Navigation("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Purchase", b => + { + b.Navigation("Builds"); + + b.Navigation("Goods"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/HardwareShop/HardwareShopDatabaseImplement/Migrations/20230402135808_init.cs b/HardwareShop/HardwareShopDatabaseImplement/Migrations/20230402135808_init.cs new file mode 100644 index 0000000..e24fd62 --- /dev/null +++ b/HardwareShop/HardwareShopDatabaseImplement/Migrations/20230402135808_init.cs @@ -0,0 +1,384 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace HardwareShopDatabaseImplement.Migrations +{ + /// + public partial class init : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Login = table.Column(type: "text", nullable: false), + Email = table.Column(type: "text", nullable: false), + Password = table.Column(type: "text", nullable: false), + Role = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Builds", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Price = table.Column(type: "double precision", nullable: false), + BuildName = table.Column(type: "text", nullable: false), + UserId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Builds", x => x.Id); + table.ForeignKey( + name: "FK_Builds_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Components", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + ComponentName = table.Column(type: "text", nullable: false), + Cost = table.Column(type: "double precision", nullable: false), + UserId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Components", x => x.Id); + table.ForeignKey( + name: "FK_Components_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Goods", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + GoodName = table.Column(type: "text", nullable: false), + Price = table.Column(type: "double precision", nullable: false), + UserId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Goods", x => x.Id); + table.ForeignKey( + name: "FK_Goods_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Purchases", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Sum = table.Column(type: "double precision", nullable: false), + PurchaseStatus = table.Column(type: "integer", nullable: false), + DatePurchase = table.Column(type: "timestamp with time zone", nullable: true), + UserId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Purchases", x => x.Id); + table.ForeignKey( + name: "FK_Purchases_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Comments", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + Text = table.Column(type: "text", nullable: false), + BuildId = table.Column(type: "integer", nullable: false), + UserId = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Comments", x => x.Id); + table.ForeignKey( + name: "FK_Comments_Builds_BuildId", + column: x => x.BuildId, + principalTable: "Builds", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Comments_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "ComponentsBuilds", + columns: table => new + { + BuildId = table.Column(type: "integer", nullable: false), + ComponentId = table.Column(type: "integer", nullable: false), + Count = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ComponentsBuilds", x => new { x.ComponentId, x.BuildId }); + table.ForeignKey( + name: "FK_ComponentsBuilds_Builds_BuildId", + column: x => x.BuildId, + principalTable: "Builds", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_ComponentsBuilds_Components_ComponentId", + column: x => x.ComponentId, + principalTable: "Components", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "GoodsComponents", + columns: table => new + { + GoodId = table.Column(type: "integer", nullable: false), + ComponentId = table.Column(type: "integer", nullable: false), + Count = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_GoodsComponents", x => new { x.GoodId, x.ComponentId }); + table.ForeignKey( + name: "FK_GoodsComponents_Components_ComponentId", + column: x => x.ComponentId, + principalTable: "Components", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_GoodsComponents_Goods_GoodId", + column: x => x.GoodId, + principalTable: "Goods", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Orders", + columns: table => new + { + Id = table.Column(type: "integer", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + GoodId = table.Column(type: "integer", nullable: false), + UserId = table.Column(type: "integer", nullable: false), + Count = table.Column(type: "integer", nullable: false), + Sum = table.Column(type: "double precision", nullable: false), + Status = table.Column(type: "integer", nullable: false), + DateCreate = table.Column(type: "timestamp with time zone", nullable: false), + DateImplement = table.Column(type: "timestamp with time zone", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Orders", x => x.Id); + table.ForeignKey( + name: "FK_Orders_Goods_GoodId", + column: x => x.GoodId, + principalTable: "Goods", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Orders_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PurchasesBuilds", + columns: table => new + { + BuildId = table.Column(type: "integer", nullable: false), + PurchaseId = table.Column(type: "integer", nullable: false), + Count = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PurchasesBuilds", x => new { x.PurchaseId, x.BuildId }); + table.ForeignKey( + name: "FK_PurchasesBuilds_Builds_BuildId", + column: x => x.BuildId, + principalTable: "Builds", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PurchasesBuilds_Purchases_PurchaseId", + column: x => x.PurchaseId, + principalTable: "Purchases", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "PurchasesGoods", + columns: table => new + { + PurchaseId = table.Column(type: "integer", nullable: false), + GoodId = table.Column(type: "integer", nullable: false), + Count = table.Column(type: "integer", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PurchasesGoods", x => new { x.PurchaseId, x.GoodId }); + table.ForeignKey( + name: "FK_PurchasesGoods_Goods_GoodId", + column: x => x.GoodId, + principalTable: "Goods", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_PurchasesGoods_Purchases_PurchaseId", + column: x => x.PurchaseId, + principalTable: "Purchases", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Builds_UserId", + table: "Builds", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Comments_BuildId", + table: "Comments", + column: "BuildId"); + + migrationBuilder.CreateIndex( + name: "IX_Comments_UserId", + table: "Comments", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Components_UserId", + table: "Components", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_ComponentsBuilds_BuildId", + table: "ComponentsBuilds", + column: "BuildId"); + + migrationBuilder.CreateIndex( + name: "IX_Goods_UserId", + table: "Goods", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_GoodsComponents_ComponentId", + table: "GoodsComponents", + column: "ComponentId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_GoodId", + table: "Orders", + column: "GoodId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_UserId", + table: "Orders", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Purchases_UserId", + table: "Purchases", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_PurchasesBuilds_BuildId", + table: "PurchasesBuilds", + column: "BuildId"); + + migrationBuilder.CreateIndex( + name: "IX_PurchasesGoods_GoodId", + table: "PurchasesGoods", + column: "GoodId"); + + migrationBuilder.CreateIndex( + name: "IX_Users_Email", + table: "Users", + column: "Email", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_Users_Login", + table: "Users", + column: "Login", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Comments"); + + migrationBuilder.DropTable( + name: "ComponentsBuilds"); + + migrationBuilder.DropTable( + name: "GoodsComponents"); + + migrationBuilder.DropTable( + name: "Orders"); + + migrationBuilder.DropTable( + name: "PurchasesBuilds"); + + migrationBuilder.DropTable( + name: "PurchasesGoods"); + + migrationBuilder.DropTable( + name: "Components"); + + migrationBuilder.DropTable( + name: "Builds"); + + migrationBuilder.DropTable( + name: "Goods"); + + migrationBuilder.DropTable( + name: "Purchases"); + + migrationBuilder.DropTable( + name: "Users"); + } + } +} diff --git a/HardwareShop/HardwareShopDatabaseImplement/Migrations/HardwareShopDatabaseModelSnapshot.cs b/HardwareShop/HardwareShopDatabaseImplement/Migrations/HardwareShopDatabaseModelSnapshot.cs new file mode 100644 index 0000000..def5cac --- /dev/null +++ b/HardwareShop/HardwareShopDatabaseImplement/Migrations/HardwareShopDatabaseModelSnapshot.cs @@ -0,0 +1,505 @@ +// +using System; +using HardwareShopDatabaseImplement; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace HardwareShopDatabaseImplement.Migrations +{ + [DbContext(typeof(HardwareShopDatabase))] + partial class HardwareShopDatabaseModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.ComponentBuild", b => + { + b.Property("ComponentId") + .HasColumnType("integer"); + + b.Property("BuildId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("ComponentId", "BuildId"); + + b.HasIndex("BuildId"); + + b.ToTable("ComponentsBuilds"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.GoodComponent", b => + { + b.Property("GoodId") + .HasColumnType("integer"); + + b.Property("ComponentId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("GoodId", "ComponentId"); + + b.HasIndex("ComponentId"); + + b.ToTable("GoodsComponents"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseBuild", b => + { + b.Property("PurchaseId") + .HasColumnType("integer"); + + b.Property("BuildId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("PurchaseId", "BuildId"); + + b.HasIndex("BuildId"); + + b.ToTable("PurchasesBuilds"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseGood", b => + { + b.Property("PurchaseId") + .HasColumnType("integer"); + + b.Property("GoodId") + .HasColumnType("integer"); + + b.Property("Count") + .HasColumnType("integer"); + + b.HasKey("PurchaseId", "GoodId"); + + b.HasIndex("GoodId"); + + b.ToTable("PurchasesGoods"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Component", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ComponentName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Cost") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Components"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Good", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("GoodName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Price") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Goods"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Count") + .HasColumnType("integer"); + + b.Property("DateCreate") + .HasColumnType("timestamp with time zone"); + + b.Property("DateImplement") + .HasColumnType("timestamp with time zone"); + + b.Property("GoodId") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Sum") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("GoodId"); + + b.HasIndex("UserId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Email") + .IsRequired() + .HasColumnType("text"); + + b.Property("Login") + .IsRequired() + .HasColumnType("text"); + + b.Property("Password") + .IsRequired() + .HasColumnType("text"); + + b.Property("Role") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("Email") + .IsUnique(); + + b.HasIndex("Login") + .IsUnique(); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Build", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BuildName") + .IsRequired() + .HasColumnType("text"); + + b.Property("Price") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Builds"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BuildId") + .HasColumnType("integer"); + + b.Property("Text") + .IsRequired() + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("BuildId"); + + b.HasIndex("UserId"); + + b.ToTable("Comments"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Purchase", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("DatePurchase") + .HasColumnType("timestamp with time zone"); + + b.Property("PurchaseStatus") + .HasColumnType("integer"); + + b.Property("Sum") + .HasColumnType("double precision"); + + b.Property("UserId") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.ComponentBuild", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Build", "Build") + .WithMany("Components") + .HasForeignKey("BuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Component", "Component") + .WithMany("Builds") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Build"); + + b.Navigation("Component"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.GoodComponent", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Component", "Component") + .WithMany("Goods") + .HasForeignKey("ComponentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Good", "Good") + .WithMany("Components") + .HasForeignKey("GoodId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Component"); + + b.Navigation("Good"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseBuild", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Build", "Build") + .WithMany("Purchases") + .HasForeignKey("BuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Purchase", "Purchase") + .WithMany("Builds") + .HasForeignKey("PurchaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Build"); + + b.Navigation("Purchase"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.ManyToMany.PurchaseGood", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Good", "Good") + .WithMany("Purchases") + .HasForeignKey("GoodId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Purchase", "Purchase") + .WithMany("Goods") + .HasForeignKey("PurchaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Good"); + + b.Navigation("Purchase"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Component", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Components") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Good", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Goods") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Order", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Storekeeper.Good", "Good") + .WithMany("Orders") + .HasForeignKey("GoodId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Orders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Good"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Build", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Builds") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Comment", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.Worker.Build", "Build") + .WithMany("Comments") + .HasForeignKey("BuildId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Comments") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Build"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Purchase", b => + { + b.HasOne("HardwareShopDatabaseImplement.Models.User", "User") + .WithMany("Purchases") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Component", b => + { + b.Navigation("Builds"); + + b.Navigation("Goods"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Storekeeper.Good", b => + { + b.Navigation("Components"); + + b.Navigation("Orders"); + + b.Navigation("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.User", b => + { + b.Navigation("Builds"); + + b.Navigation("Comments"); + + b.Navigation("Components"); + + b.Navigation("Goods"); + + b.Navigation("Orders"); + + b.Navigation("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Build", b => + { + b.Navigation("Comments"); + + b.Navigation("Components"); + + b.Navigation("Purchases"); + }); + + modelBuilder.Entity("HardwareShopDatabaseImplement.Models.Worker.Purchase", b => + { + b.Navigation("Builds"); + + b.Navigation("Goods"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/HardwareShop/HardwareShopDatabaseImplement/Models/Storekeeper/Component.cs b/HardwareShop/HardwareShopDatabaseImplement/Models/Storekeeper/Component.cs index b856592..c5cf4f0 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Models/Storekeeper/Component.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Models/Storekeeper/Component.cs @@ -1,6 +1,7 @@ using HardwareShopContracts.BindingModels; using HardwareShopContracts.ViewModels; using HardwareShopDatabaseImplement.Models.ManyToMany; +using HardwareShopDatabaseImplement.Models.Worker; using HardwareShopDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; @@ -103,6 +104,12 @@ namespace HardwareShopDatabaseImplement.Models.Storekeeper Build = context.Builds.First(x => x.Id == cb.Key), Count = cb.Value.Item2 }); + + var build = context.Builds.First(x => x.Id == cb.Key); + if (build != null) + { + build.Price += cb.Value.Item2 * component.Cost; + } context.SaveChanges(); } _componentsBuilds = null; diff --git a/HardwareShop/HardwareShopDatabaseImplement/Models/User.cs b/HardwareShop/HardwareShopDatabaseImplement/Models/User.cs index a13627a..8057cfb 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Models/User.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Models/User.cs @@ -25,22 +25,22 @@ namespace HardwareShopDatabaseImplement.Models [Required] public UserRole Role { get; set; } = UserRole.Неизвестен; - [ForeignKey("ClientId")] + [ForeignKey("UserId")] public virtual List Orders { get; set; } = new(); - [ForeignKey("ClientId")] + [ForeignKey("UserId")] public virtual List Builds { get; set; } = new(); - [ForeignKey("ClientId")] + [ForeignKey("UserId")] public virtual List Comments { get; set; } = new(); - [ForeignKey("ClientId")] + [ForeignKey("UserId")] public virtual List Purchases { get; set; } = new(); - [ForeignKey("ClientId")] + [ForeignKey("UserId")] public virtual List Components { get; set; } = new(); - [ForeignKey("ClientId")] + [ForeignKey("UserId")] public virtual List Goods { get; set; } = new(); diff --git a/HardwareShop/HardwareShopDatabaseImplement/Models/Worker/Build.cs b/HardwareShop/HardwareShopDatabaseImplement/Models/Worker/Build.cs index ea70d0b..a319b23 100644 --- a/HardwareShop/HardwareShopDatabaseImplement/Models/Worker/Build.cs +++ b/HardwareShop/HardwareShopDatabaseImplement/Models/Worker/Build.cs @@ -55,6 +55,7 @@ namespace HardwareShopDatabaseImplement.Models.Worker Id = model.Id, BuildName = model.BuildName, UserId = model.UserId, + Price = model.Price }; } @@ -90,7 +91,7 @@ namespace HardwareShopDatabaseImplement.Models.Worker context.SaveChanges(); } var build = context.Builds.First(x => x.Id == Id); - //добавляем в бд блюда которые есть в моделе, но ещё нет в бд + //добавляем в бд элементы которые есть в модели, но ещё нет в бд foreach (var bp in model.BuildPurchases) { context.PurchasesBuilds.Add(new PurchaseBuild @@ -102,7 +103,7 @@ namespace HardwareShopDatabaseImplement.Models.Worker var purchase = context.Purchases.First(x => x.Id == bp.Key); if (purchase != null) { - purchase.Sum += bp.Value.Item2* build.Price; + purchase.Sum += bp.Value.Item2 * build.Price; } context.SaveChanges(); diff --git a/HardwareShop/HardwareShopRestApi/Controllers/MainController.cs b/HardwareShop/HardwareShopRestApi/Controllers/MainController.cs new file mode 100644 index 0000000..136cfc3 --- /dev/null +++ b/HardwareShop/HardwareShopRestApi/Controllers/MainController.cs @@ -0,0 +1,66 @@ +using HardwareShopContracts.BindingModels; +using HardwareShopContracts.BusinessLogicsContracts; +using Microsoft.AspNetCore.Mvc; + +namespace HardwareShopRestApi.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class MainController : Controller + { + private readonly ILogger _logger; + + private readonly IPurchaseLogic _purchase; + + private readonly IBuildLogic _build; + + public MainController(ILogger logger, IPurchaseLogic pur, IBuildLogic build) + { + _logger = logger; + _purchase = pur; + _build = build; + } + + [HttpPost] + public void CreateBuild(BuildBindingModel model) + { + try + { + _build.Create(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания"); + throw; + } + } + + [HttpPost] + public void CreatePurchase(PurchaseBindingModel model) + { + try + { + _purchase.Create(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания"); + throw; + } + } + + [HttpPut] + public void UpdateBuild(BuildBindingModel model) + { + try + { + _build.Update(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка обновления"); + throw; + } + } + } +}