using System; using Microsoft.EntityFrameworkCore.Migrations; using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; #nullable disable namespace LiteCharms.Features.MidrandBooks.Postgres.Migrations { /// public sealed partial class Init : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Authors", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), PublisherType = table.Column(type: "integer", nullable: false), Company = table.Column(type: "text", nullable: true), VatNumber = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), LastName = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), Biography = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), Email = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), Website = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), ImageUrl = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: false), ThumbnailImageUrl = table.Column(type: "character varying(2048)", maxLength: 2048, nullable: true), Enabled = table.Column(type: "boolean", nullable: false, defaultValue: true), SocialMedia = table.Column(type: "jsonb", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Authors", x => x.Id); }); migrationBuilder.CreateTable( name: "Customers", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), Company = table.Column(type: "text", nullable: true), VatNumber = table.Column(type: "text", nullable: true), Email = table.Column(type: "text", nullable: false), Website = table.Column(type: "text", nullable: false), Phone = table.Column(type: "text", nullable: false), Enabled = table.Column(type: "boolean", nullable: false, defaultValue: true), SocialMedia = table.Column(type: "jsonb", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Customers", x => x.Id); }); migrationBuilder.CreateTable( name: "Orders", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), CustomerId = table.Column(type: "bigint", nullable: false), Status = table.Column(type: "integer", nullable: false), Total = table.Column(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false), Notes = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), InvoiceUrl = table.Column(type: "text", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Orders", x => x.Id); }); migrationBuilder.CreateTable( name: "Products", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), Type = table.Column(type: "integer", nullable: false), Name = table.Column(type: "character varying(255)", maxLength: 255, nullable: false), Summary = table.Column(type: "character varying(512)", maxLength: 512, nullable: false), Description = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), ImageUrl = table.Column(type: "character varying(1024)", maxLength: 1024, nullable: true), ThumbnailUrls = table.Column(type: "text[]", nullable: true), Categories = table.Column(type: "text[]", nullable: true), Enabled = table.Column(type: "boolean", nullable: false, defaultValue: false), Metadata = table.Column(type: "jsonb", nullable: true) }, constraints: table => { table.PrimaryKey("PK_Products", x => x.Id); }); migrationBuilder.CreateTable( name: "ShippingProviders", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), Type = table.Column(type: "integer", nullable: false), Name = table.Column(type: "text", nullable: true), Price = table.Column(type: "numeric", nullable: true), TrackingUrl = table.Column(type: "text", nullable: true), Enabled = table.Column(type: "boolean", nullable: false) }, constraints: table => { table.PrimaryKey("PK_ShippingProviders", x => x.Id); }); migrationBuilder.CreateTable( name: "Addresses", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CustomerId = table.Column(type: "bigint", nullable: false), Name = table.Column(type: "text", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), Type = table.Column(type: "integer", nullable: false), BuildingType = table.Column(type: "integer", nullable: false), Street = table.Column(type: "text", nullable: false), City = table.Column(type: "text", nullable: false), State = table.Column(type: "text", nullable: false), PostalCode = table.Column(type: "text", nullable: false), Country = table.Column(type: "text", nullable: false), IsPrimary = table.Column(type: "boolean", nullable: false, defaultValue: false), Enabled = table.Column(type: "boolean", nullable: false, defaultValue: true) }, constraints: table => { table.PrimaryKey("PK_Addresses", x => x.Id); table.ForeignKey( name: "FK_Addresses_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Contacts", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CustomerId = table.Column(type: "bigint", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), Type = table.Column(type: "integer", nullable: false), Name = table.Column(type: "text", nullable: false), LastName = table.Column(type: "text", nullable: false), Email = table.Column(type: "text", nullable: false), Phone = table.Column(type: "text", nullable: false), IsPrimary = table.Column(type: "boolean", nullable: false, defaultValue: false), Enabled = table.Column(type: "boolean", nullable: false, defaultValue: true) }, constraints: table => { table.PrimaryKey("PK_Contacts", x => x.Id); table.ForeignKey( name: "FK_Contacts_Customers_CustomerId", column: x => x.CustomerId, principalTable: "Customers", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Refunds", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), OrderId = table.Column(type: "bigint", nullable: false), Type = table.Column(type: "integer", nullable: false), Status = table.Column(type: "integer", nullable: false), Reason = table.Column(type: "character varying(1000)", maxLength: 1000, nullable: true), Amount = table.Column(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false) }, constraints: table => { table.PrimaryKey("PK_Refunds", x => x.Id); table.ForeignKey( name: "FK_Refunds_Orders_OrderId", column: x => x.OrderId, principalTable: "Orders", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "Books", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true), AuthorId = table.Column(type: "bigint", nullable: false), ProductId = table.Column(type: "bigint", nullable: false), Rating = table.Column(type: "integer", nullable: false), Ranking = table.Column(type: "integer", nullable: false), Enabled = table.Column(type: "boolean", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Books", x => x.Id); table.ForeignKey( name: "FK_Books_Authors_AuthorId", column: x => x.AuthorId, principalTable: "Authors", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_Books_Products_ProductId", column: x => x.ProductId, principalTable: "Products", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }); migrationBuilder.CreateTable( name: "Prices", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), ProductId = table.Column(type: "bigint", nullable: false), Amount = table.Column(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false), Discount = table.Column(type: "numeric(18,2)", precision: 18, scale: 2, nullable: false), Enabled = table.Column(type: "boolean", nullable: false, defaultValue: false) }, constraints: table => { table.PrimaryKey("PK_Prices", x => x.Id); table.ForeignKey( name: "FK_Prices_Products_ProductId", column: x => x.ProductId, principalTable: "Products", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "Shippings", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), OrderId = table.Column(type: "bigint", nullable: false), AddressId = table.Column(type: "bigint", nullable: false), ShippingProviderId = table.Column(type: "bigint", nullable: false), TrackingNumber = table.Column(type: "character varying(255)", maxLength: 255, nullable: true), Status = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Shippings", x => x.Id); table.ForeignKey( name: "FK_Shippings_Addresses_AddressId", column: x => x.AddressId, principalTable: "Addresses", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Shippings_Orders_OrderId", column: x => x.OrderId, principalTable: "Orders", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_Shippings_ShippingProviders_ShippingProviderId", column: x => x.ShippingProviderId, principalTable: "ShippingProviders", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateTable( name: "BookPages", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), AuthorBookId = table.Column(type: "bigint", nullable: false), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), UpdatedAt = table.Column(type: "timestamp with time zone", nullable: true, defaultValueSql: "now()"), Type = table.Column(type: "integer", nullable: false), ContentType = table.Column(type: "integer", nullable: false), Number = table.Column(type: "integer", nullable: false, defaultValue: 0), Content = table.Column(type: "bytea", nullable: false), Notes = table.Column(type: "text[]", nullable: true), Enabled = table.Column(type: "boolean", nullable: false, defaultValue: true), References = table.Column(type: "jsonb", nullable: true) }, constraints: table => { table.PrimaryKey("PK_BookPages", x => x.Id); table.ForeignKey( name: "FK_BookPages_Books_AuthorBookId", column: x => x.AuthorBookId, principalTable: "Books", principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "OrderItems", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), CreatedAt = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "now()"), OrderId = table.Column(type: "bigint", nullable: false), AuthorBookId = table.Column(type: "bigint", nullable: false), ProductPriceId = table.Column(type: "bigint", nullable: false), Quantity = table.Column(type: "integer", nullable: false) }, constraints: table => { table.PrimaryKey("PK_OrderItems", x => x.Id); table.ForeignKey( name: "FK_OrderItems_Books_AuthorBookId", column: x => x.AuthorBookId, principalTable: "Books", principalColumn: "Id", onDelete: ReferentialAction.Restrict); table.ForeignKey( name: "FK_OrderItems_Orders_OrderId", column: x => x.OrderId, principalTable: "Orders", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_OrderItems_Prices_ProductPriceId", column: x => x.ProductPriceId, principalTable: "Prices", principalColumn: "Id", onDelete: ReferentialAction.Restrict); }); migrationBuilder.CreateIndex( name: "IX_Addresses_CustomerId", table: "Addresses", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_BookPages_AuthorBookId", table: "BookPages", column: "AuthorBookId"); migrationBuilder.CreateIndex( name: "IX_Books_AuthorId", table: "Books", column: "AuthorId"); migrationBuilder.CreateIndex( name: "IX_Books_ProductId", table: "Books", column: "ProductId"); migrationBuilder.CreateIndex( name: "IX_Contacts_CustomerId", table: "Contacts", column: "CustomerId"); migrationBuilder.CreateIndex( name: "IX_OrderItems_AuthorBookId", table: "OrderItems", column: "AuthorBookId"); migrationBuilder.CreateIndex( name: "IX_OrderItems_OrderId", table: "OrderItems", column: "OrderId"); migrationBuilder.CreateIndex( name: "IX_OrderItems_ProductPriceId", table: "OrderItems", column: "ProductPriceId"); migrationBuilder.CreateIndex( name: "IX_Prices_ProductId", table: "Prices", column: "ProductId"); migrationBuilder.CreateIndex( name: "IX_Refunds_OrderId", table: "Refunds", column: "OrderId"); migrationBuilder.CreateIndex( name: "IX_Shippings_AddressId", table: "Shippings", column: "AddressId"); migrationBuilder.CreateIndex( name: "IX_Shippings_OrderId", table: "Shippings", column: "OrderId", unique: true); migrationBuilder.CreateIndex( name: "IX_Shippings_ShippingProviderId", table: "Shippings", column: "ShippingProviderId"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "BookPages"); migrationBuilder.DropTable( name: "Contacts"); migrationBuilder.DropTable( name: "OrderItems"); migrationBuilder.DropTable( name: "Refunds"); migrationBuilder.DropTable( name: "Shippings"); migrationBuilder.DropTable( name: "Books"); migrationBuilder.DropTable( name: "Prices"); migrationBuilder.DropTable( name: "Addresses"); migrationBuilder.DropTable( name: "Orders"); migrationBuilder.DropTable( name: "ShippingProviders"); migrationBuilder.DropTable( name: "Authors"); migrationBuilder.DropTable( name: "Products"); migrationBuilder.DropTable( name: "Customers"); } } }