From 02913f069f01ed5a887855a1e81f968d1a3f97e6 Mon Sep 17 00:00:00 2001 From: dev-celo Date: Mon, 28 Oct 2024 18:49:18 -0300 Subject: [PATCH 1/5] Feat: Implementando entity framework tools. --- backend-ecommerce.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/backend-ecommerce.csproj b/backend-ecommerce.csproj index 13a38b5..f2bb26c 100644 --- a/backend-ecommerce.csproj +++ b/backend-ecommerce.csproj @@ -16,6 +16,10 @@ all + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + From bc606082b3fb4aa62af6aa73d42cfbfced1cd426 Mon Sep 17 00:00:00 2001 From: dev-celo Date: Mon, 28 Oct 2024 18:49:42 -0300 Subject: [PATCH 2/5] Feat: Adicionando um dbSet Category. --- data/EcommerceContext.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/data/EcommerceContext.cs b/data/EcommerceContext.cs index b74b14b..9bf2fd7 100644 --- a/data/EcommerceContext.cs +++ b/data/EcommerceContext.cs @@ -16,6 +16,7 @@ public EcommerceContext(DbContextOptions options) : base(optio public DbSet Orders { get; set; } public DbSet OrderItems { get; set; } public DbSet Products { get; set; } + public DbSet Categories { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) From 27cc3f808de0bd6f6f5c88387338258e9730453e Mon Sep 17 00:00:00 2001 From: dev-celo Date: Mon, 28 Oct 2024 18:49:59 -0300 Subject: [PATCH 3/5] Feat: Implementando as migrations. --- ...1028184217_ecommerceMigrations.Designer.cs | 231 ++++++++++++++++++ .../20241028184217_ecommerceMigrations.cs | 158 ++++++++++++ Migrations/EcommerceContextModelSnapshot.cs | 228 +++++++++++++++++ 3 files changed, 617 insertions(+) create mode 100644 Migrations/20241028184217_ecommerceMigrations.Designer.cs create mode 100644 Migrations/20241028184217_ecommerceMigrations.cs create mode 100644 Migrations/EcommerceContextModelSnapshot.cs diff --git a/Migrations/20241028184217_ecommerceMigrations.Designer.cs b/Migrations/20241028184217_ecommerceMigrations.Designer.cs new file mode 100644 index 0000000..0c8374a --- /dev/null +++ b/Migrations/20241028184217_ecommerceMigrations.Designer.cs @@ -0,0 +1,231 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace backend_ecommerce.Migrations +{ + [DbContext(typeof(EcommerceContext))] + [Migration("20241028184217_ecommerceMigrations")] + partial class ecommerceMigrations + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("backend_ecommerce.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrderDate") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("int"); + + b.Property("status") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("total") + .HasColumnType("decimal(18,2)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.Property("Quantity") + .HasColumnType("int"); + + b.Property("UnitPrice") + .HasColumnType("decimal(18,2)"); + + b.HasKey("Id"); + + b.HasIndex("OrderId"); + + b.HasIndex("ProductId"); + + b.ToTable("OrderItems"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CategoryId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("decimal(18,2)"); + + b.Property("Stock") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Access") + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("Salt") + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Order", b => + { + b.HasOne("backend_ecommerce.Models.User", "User") + .WithMany("Orders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => + { + b.HasOne("backend_ecommerce.Models.Order", "Order") + .WithMany("OrderItems") + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("backend_ecommerce.Models.Product", "Product") + .WithMany("OrderItems") + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Order"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Product", b => + { + b.HasOne("backend_ecommerce.Models.Category", "Category") + .WithMany("Products") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Category", b => + { + b.Navigation("Products"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Order", b => + { + b.Navigation("OrderItems"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Product", b => + { + b.Navigation("OrderItems"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.User", b => + { + b.Navigation("Orders"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20241028184217_ecommerceMigrations.cs b/Migrations/20241028184217_ecommerceMigrations.cs new file mode 100644 index 0000000..c6b33df --- /dev/null +++ b/Migrations/20241028184217_ecommerceMigrations.cs @@ -0,0 +1,158 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace backend_ecommerce.Migrations +{ + /// + public partial class ecommerceMigrations : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Categories", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Description = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Categories", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Users", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + UserName = table.Column(type: "nvarchar(max)", nullable: false), + Email = table.Column(type: "nvarchar(max)", nullable: false), + PasswordHash = table.Column(type: "nvarchar(max)", nullable: true), + Access = table.Column(type: "nvarchar(max)", nullable: true), + Salt = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Users", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Products", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Description = table.Column(type: "nvarchar(max)", nullable: false), + Price = table.Column(type: "decimal(18,2)", nullable: false), + Stock = table.Column(type: "int", nullable: false), + CategoryId = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Products", x => x.Id); + table.ForeignKey( + name: "FK_Products_Categories_CategoryId", + column: x => x.CategoryId, + principalTable: "Categories", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Orders", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + UserId = table.Column(type: "int", nullable: false), + OrderDate = table.Column(type: "datetime2", nullable: false), + status = table.Column(type: "nvarchar(max)", nullable: false), + total = table.Column(type: "decimal(18,2)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Orders", x => x.Id); + table.ForeignKey( + name: "FK_Orders_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "OrderItems", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + OrderId = table.Column(type: "int", nullable: false), + ProductId = table.Column(type: "int", nullable: false), + Quantity = table.Column(type: "int", nullable: false), + UnitPrice = table.Column(type: "decimal(18,2)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_OrderItems", x => x.Id); + table.ForeignKey( + name: "FK_OrderItems_Orders_OrderId", + column: x => x.OrderId, + principalTable: "Orders", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_OrderItems_Products_ProductId", + column: x => x.ProductId, + principalTable: "Products", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_OrderItems_OrderId", + table: "OrderItems", + column: "OrderId"); + + migrationBuilder.CreateIndex( + name: "IX_OrderItems_ProductId", + table: "OrderItems", + column: "ProductId"); + + migrationBuilder.CreateIndex( + name: "IX_Orders_UserId", + table: "Orders", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Products_CategoryId", + table: "Products", + column: "CategoryId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "OrderItems"); + + migrationBuilder.DropTable( + name: "Orders"); + + migrationBuilder.DropTable( + name: "Products"); + + migrationBuilder.DropTable( + name: "Users"); + + migrationBuilder.DropTable( + name: "Categories"); + } + } +} diff --git a/Migrations/EcommerceContextModelSnapshot.cs b/Migrations/EcommerceContextModelSnapshot.cs new file mode 100644 index 0000000..7278f93 --- /dev/null +++ b/Migrations/EcommerceContextModelSnapshot.cs @@ -0,0 +1,228 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace backend_ecommerce.Migrations +{ + [DbContext(typeof(EcommerceContext))] + partial class EcommerceContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("backend_ecommerce.Models.Category", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Categories"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Order", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrderDate") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("int"); + + b.Property("status") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("total") + .HasColumnType("decimal(18,2)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("Orders"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("OrderId") + .HasColumnType("int"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.Property("Quantity") + .HasColumnType("int"); + + b.Property("UnitPrice") + .HasColumnType("decimal(18,2)"); + + b.HasKey("Id"); + + b.HasIndex("OrderId"); + + b.HasIndex("ProductId"); + + b.ToTable("OrderItems"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CategoryId") + .IsRequired() + .HasColumnType("int"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Price") + .HasColumnType("decimal(18,2)"); + + b.Property("Stock") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CategoryId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Access") + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("Salt") + .HasColumnType("nvarchar(max)"); + + b.Property("UserName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Order", b => + { + b.HasOne("backend_ecommerce.Models.User", "User") + .WithMany("Orders") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("User"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => + { + b.HasOne("backend_ecommerce.Models.Order", "Order") + .WithMany("OrderItems") + .HasForeignKey("OrderId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("backend_ecommerce.Models.Product", "Product") + .WithMany("OrderItems") + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Order"); + + b.Navigation("Product"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Product", b => + { + b.HasOne("backend_ecommerce.Models.Category", "Category") + .WithMany("Products") + .HasForeignKey("CategoryId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Category"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Category", b => + { + b.Navigation("Products"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Order", b => + { + b.Navigation("OrderItems"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.Product", b => + { + b.Navigation("OrderItems"); + }); + + modelBuilder.Entity("backend_ecommerce.Models.User", b => + { + b.Navigation("Orders"); + }); +#pragma warning restore 612, 618 + } + } +} From 4975584a6caeb41a8ff0dbbab7cd5c3b23a22799 Mon Sep 17 00:00:00 2001 From: dev-celo Date: Mon, 28 Oct 2024 18:50:23 -0300 Subject: [PATCH 4/5] =?UTF-8?q?Updt:=20Adicionando=20description=20=C3=A0?= =?UTF-8?q?=20category?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Models/Category.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Models/Category.cs b/Models/Category.cs index b4b763d..42a047a 100644 --- a/Models/Category.cs +++ b/Models/Category.cs @@ -4,6 +4,7 @@ public class Category { public int Id { get; set;} public string Name { get; set;} + public string Description { get; set;} public ICollection Products { get; set; } } } \ No newline at end of file From 1515a4badc9e85454ce938d3550d15eae434ff80 Mon Sep 17 00:00:00 2001 From: dev-celo Date: Thu, 21 Nov 2024 17:56:37 -0300 Subject: [PATCH 5/5] =?UTF-8?q?Delete:=20Apagando=20migrations=20ap=C3=B3s?= =?UTF-8?q?=20bug.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1028184217_ecommerceMigrations.Designer.cs | 231 ------------------ .../20241028184217_ecommerceMigrations.cs | 158 ------------ Migrations/EcommerceContextModelSnapshot.cs | 228 ----------------- script-all-database.sql | 81 ++++++ 4 files changed, 81 insertions(+), 617 deletions(-) delete mode 100644 Migrations/20241028184217_ecommerceMigrations.Designer.cs delete mode 100644 Migrations/20241028184217_ecommerceMigrations.cs delete mode 100644 Migrations/EcommerceContextModelSnapshot.cs create mode 100644 script-all-database.sql diff --git a/Migrations/20241028184217_ecommerceMigrations.Designer.cs b/Migrations/20241028184217_ecommerceMigrations.Designer.cs deleted file mode 100644 index 0c8374a..0000000 --- a/Migrations/20241028184217_ecommerceMigrations.Designer.cs +++ /dev/null @@ -1,231 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace backend_ecommerce.Migrations -{ - [DbContext(typeof(EcommerceContext))] - [Migration("20241028184217_ecommerceMigrations")] - partial class ecommerceMigrations - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("backend_ecommerce.Models.Category", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Description") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Categories"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("OrderDate") - .HasColumnType("datetime2"); - - b.Property("UserId") - .HasColumnType("int"); - - b.Property("status") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("total") - .HasColumnType("decimal(18,2)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("OrderId") - .HasColumnType("int"); - - b.Property("ProductId") - .HasColumnType("int"); - - b.Property("Quantity") - .HasColumnType("int"); - - b.Property("UnitPrice") - .HasColumnType("decimal(18,2)"); - - b.HasKey("Id"); - - b.HasIndex("OrderId"); - - b.HasIndex("ProductId"); - - b.ToTable("OrderItems"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Product", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("CategoryId") - .IsRequired() - .HasColumnType("int"); - - b.Property("Description") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("decimal(18,2)"); - - b.Property("Stock") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("CategoryId"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Access") - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("PasswordHash") - .HasColumnType("nvarchar(max)"); - - b.Property("Salt") - .HasColumnType("nvarchar(max)"); - - b.Property("UserName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Order", b => - { - b.HasOne("backend_ecommerce.Models.User", "User") - .WithMany("Orders") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => - { - b.HasOne("backend_ecommerce.Models.Order", "Order") - .WithMany("OrderItems") - .HasForeignKey("OrderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("backend_ecommerce.Models.Product", "Product") - .WithMany("OrderItems") - .HasForeignKey("ProductId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Order"); - - b.Navigation("Product"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Product", b => - { - b.HasOne("backend_ecommerce.Models.Category", "Category") - .WithMany("Products") - .HasForeignKey("CategoryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Category"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Category", b => - { - b.Navigation("Products"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Order", b => - { - b.Navigation("OrderItems"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Product", b => - { - b.Navigation("OrderItems"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.User", b => - { - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/Migrations/20241028184217_ecommerceMigrations.cs b/Migrations/20241028184217_ecommerceMigrations.cs deleted file mode 100644 index c6b33df..0000000 --- a/Migrations/20241028184217_ecommerceMigrations.cs +++ /dev/null @@ -1,158 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace backend_ecommerce.Migrations -{ - /// - public partial class ecommerceMigrations : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Categories", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Name = table.Column(type: "nvarchar(max)", nullable: false), - Description = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Categories", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Users", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - UserName = table.Column(type: "nvarchar(max)", nullable: false), - Email = table.Column(type: "nvarchar(max)", nullable: false), - PasswordHash = table.Column(type: "nvarchar(max)", nullable: true), - Access = table.Column(type: "nvarchar(max)", nullable: true), - Salt = table.Column(type: "nvarchar(max)", nullable: true) - }, - constraints: table => - { - table.PrimaryKey("PK_Users", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Products", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Name = table.Column(type: "nvarchar(max)", nullable: false), - Description = table.Column(type: "nvarchar(max)", nullable: false), - Price = table.Column(type: "decimal(18,2)", nullable: false), - Stock = table.Column(type: "int", nullable: false), - CategoryId = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Products", x => x.Id); - table.ForeignKey( - name: "FK_Products_Categories_CategoryId", - column: x => x.CategoryId, - principalTable: "Categories", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "Orders", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - UserId = table.Column(type: "int", nullable: false), - OrderDate = table.Column(type: "datetime2", nullable: false), - status = table.Column(type: "nvarchar(max)", nullable: false), - total = table.Column(type: "decimal(18,2)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Orders", x => x.Id); - table.ForeignKey( - name: "FK_Orders_Users_UserId", - column: x => x.UserId, - principalTable: "Users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateTable( - name: "OrderItems", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - OrderId = table.Column(type: "int", nullable: false), - ProductId = table.Column(type: "int", nullable: false), - Quantity = table.Column(type: "int", nullable: false), - UnitPrice = table.Column(type: "decimal(18,2)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_OrderItems", x => x.Id); - table.ForeignKey( - name: "FK_OrderItems_Orders_OrderId", - column: x => x.OrderId, - principalTable: "Orders", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - table.ForeignKey( - name: "FK_OrderItems_Products_ProductId", - column: x => x.ProductId, - principalTable: "Products", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - }); - - migrationBuilder.CreateIndex( - name: "IX_OrderItems_OrderId", - table: "OrderItems", - column: "OrderId"); - - migrationBuilder.CreateIndex( - name: "IX_OrderItems_ProductId", - table: "OrderItems", - column: "ProductId"); - - migrationBuilder.CreateIndex( - name: "IX_Orders_UserId", - table: "Orders", - column: "UserId"); - - migrationBuilder.CreateIndex( - name: "IX_Products_CategoryId", - table: "Products", - column: "CategoryId"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "OrderItems"); - - migrationBuilder.DropTable( - name: "Orders"); - - migrationBuilder.DropTable( - name: "Products"); - - migrationBuilder.DropTable( - name: "Users"); - - migrationBuilder.DropTable( - name: "Categories"); - } - } -} diff --git a/Migrations/EcommerceContextModelSnapshot.cs b/Migrations/EcommerceContextModelSnapshot.cs deleted file mode 100644 index 7278f93..0000000 --- a/Migrations/EcommerceContextModelSnapshot.cs +++ /dev/null @@ -1,228 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace backend_ecommerce.Migrations -{ - [DbContext(typeof(EcommerceContext))] - partial class EcommerceContextModelSnapshot : ModelSnapshot - { - protected override void BuildModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "7.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("backend_ecommerce.Models.Category", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Description") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Categories"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Order", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("OrderDate") - .HasColumnType("datetime2"); - - b.Property("UserId") - .HasColumnType("int"); - - b.Property("status") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("total") - .HasColumnType("decimal(18,2)"); - - b.HasKey("Id"); - - b.HasIndex("UserId"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("OrderId") - .HasColumnType("int"); - - b.Property("ProductId") - .HasColumnType("int"); - - b.Property("Quantity") - .HasColumnType("int"); - - b.Property("UnitPrice") - .HasColumnType("decimal(18,2)"); - - b.HasKey("Id"); - - b.HasIndex("OrderId"); - - b.HasIndex("ProductId"); - - b.ToTable("OrderItems"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Product", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("CategoryId") - .IsRequired() - .HasColumnType("int"); - - b.Property("Description") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("decimal(18,2)"); - - b.Property("Stock") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("CategoryId"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.User", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Access") - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("PasswordHash") - .HasColumnType("nvarchar(max)"); - - b.Property("Salt") - .HasColumnType("nvarchar(max)"); - - b.Property("UserName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Users"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Order", b => - { - b.HasOne("backend_ecommerce.Models.User", "User") - .WithMany("Orders") - .HasForeignKey("UserId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("User"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.OrderItem", b => - { - b.HasOne("backend_ecommerce.Models.Order", "Order") - .WithMany("OrderItems") - .HasForeignKey("OrderId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("backend_ecommerce.Models.Product", "Product") - .WithMany("OrderItems") - .HasForeignKey("ProductId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Order"); - - b.Navigation("Product"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Product", b => - { - b.HasOne("backend_ecommerce.Models.Category", "Category") - .WithMany("Products") - .HasForeignKey("CategoryId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Category"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Category", b => - { - b.Navigation("Products"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Order", b => - { - b.Navigation("OrderItems"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.Product", b => - { - b.Navigation("OrderItems"); - }); - - modelBuilder.Entity("backend_ecommerce.Models.User", b => - { - b.Navigation("Orders"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/script-all-database.sql b/script-all-database.sql new file mode 100644 index 0000000..78cb933 --- /dev/null +++ b/script-all-database.sql @@ -0,0 +1,81 @@ +IF OBJECT_ID(N'[__EFMigrationsHistory]') IS NULL +BEGIN + CREATE TABLE [__EFMigrationsHistory] ( + [MigrationId] nvarchar(150) NOT NULL, + [ProductVersion] nvarchar(32) NOT NULL, + CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId]) + ); +END; +GO + +BEGIN TRANSACTION; +GO + +CREATE TABLE [Categories] ( + [Id] int NOT NULL IDENTITY, + [Name] nvarchar(max) NOT NULL, + [Description] nvarchar(max) NOT NULL, + CONSTRAINT [PK_Categories] PRIMARY KEY ([Id]) +); +GO + +CREATE TABLE [Users] ( + [Id] int NOT NULL IDENTITY, + [UserName] nvarchar(max) NOT NULL, + [Email] nvarchar(max) NOT NULL, + [PasswordHash] nvarchar(max) NULL, + [Access] nvarchar(max) NULL, + [Salt] nvarchar(max) NULL, + CONSTRAINT [PK_Users] PRIMARY KEY ([Id]) +); +GO + +CREATE TABLE [Products] ( + [Id] int NOT NULL IDENTITY, + [Name] nvarchar(max) NOT NULL, + [Description] nvarchar(max) NOT NULL, + [Price] decimal(18,2) NOT NULL, + [Stock] int NOT NULL, + [CategoryId] int NOT NULL, + CONSTRAINT [PK_Products] PRIMARY KEY ([Id]), + CONSTRAINT [FK_Products_Categories_CategoryId] FOREIGN KEY ([CategoryId]) REFERENCES [Categories] ([Id]) ON DELETE CASCADE +); +GO + +CREATE TABLE [Orders] ( + [Id] int NOT NULL IDENTITY, + [UserId] int NOT NULL, + [OrderDate] datetime2 NOT NULL, + [status] nvarchar(max) NOT NULL, + [total] decimal(18,2) NOT NULL, + CONSTRAINT [PK_Orders] PRIMARY KEY ([Id]), + CONSTRAINT [FK_Orders_Users_UserId] FOREIGN KEY ([UserId]) REFERENCES [Users] ([Id]) ON DELETE CASCADE +); +GO + +CREATE TABLE [OrderItems] ( + [Id] int NOT NULL IDENTITY, + [OrderId] int NOT NULL, + [ProductId] int NOT NULL, + [Quantity] int NOT NULL, + [UnitPrice] decimal(18,2) NOT NULL, + CONSTRAINT [PK_OrderItems] PRIMARY KEY ([Id]), + CONSTRAINT [FK_OrderItems_Orders_OrderId] FOREIGN KEY ([OrderId]) REFERENCES [Orders] ([Id]) ON DELETE CASCADE, + CONSTRAINT [FK_OrderItems_Products_ProductId] FOREIGN KEY ([ProductId]) REFERENCES [Products] ([Id]) ON DELETE CASCADE +); +GO + +CREATE INDEX [IX_OrderItems_OrderId] ON [OrderItems] ([OrderId]); +GO + +CREATE INDEX [IX_OrderItems_ProductId] ON [OrderItems] ([ProductId]); +GO + +CREATE INDEX [IX_Orders_UserId] ON [Orders] ([UserId]); +GO + +CREATE INDEX [IX_Products_CategoryId] ON [Products] ([CategoryId]); +GO + +COMMIT; +GO