using System; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; #nullable disable namespace MiaoJiZhang.Infrastructure.Persistence.Migrations { /// public partial class VendorPushInfrastructure : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "BudgetNotificationReceipts", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), UserId = table.Column(type: "bigint", nullable: false), BudgetId = table.Column(type: "bigint", nullable: false), Period = table.Column(type: "int", nullable: false), Threshold = table.Column(type: "int", nullable: false), CreatedAt = table.Column(type: "datetime(6)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_BudgetNotificationReceipts", x => x.Id); table.ForeignKey( name: "FK_BudgetNotificationReceipts_Budgets_BudgetId", column: x => x.BudgetId, principalTable: "Budgets", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_BudgetNotificationReceipts_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "PushDevices", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), UserId = table.Column(type: "bigint", nullable: false), InstallationId = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Provider = table.Column(type: "varchar(16)", maxLength: 16, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), TokenCiphertext = table.Column(type: "varchar(6144)", maxLength: 6144, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), TokenHash = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), UnbindTokenHash = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), PackageName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Flavor = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), AppVersion = table.Column(type: "varchar(32)", maxLength: 32, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), VersionCode = table.Column(type: "int", nullable: false), NotificationsAllowed = table.Column(type: "tinyint(1)", nullable: false), IsActive = table.Column(type: "tinyint(1)", nullable: false), DisabledReason = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), CreatedAt = table.Column(type: "datetime(6)", nullable: false), UpdatedAt = table.Column(type: "datetime(6)", nullable: false), LastSeenAt = table.Column(type: "datetime(6)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_PushDevices", x => x.Id); table.ForeignKey( name: "FK_PushDevices_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "PushMessages", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), PublicId = table.Column(type: "varchar(36)", maxLength: 36, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Source = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), State = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Category = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Title = table.Column(type: "varchar(80)", maxLength: 80, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Body = table.Column(type: "varchar(240)", maxLength: 240, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), Action = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), EntityId = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), TargetUserId = table.Column(type: "bigint", nullable: true), Flavor = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), ProviderFilter = table.Column(type: "varchar(16)", maxLength: 16, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), MinVersionCode = table.Column(type: "int", nullable: true), MaxVersionCode = table.Column(type: "int", nullable: true), TtlSeconds = table.Column(type: "int", nullable: false), IsTest = table.Column(type: "tinyint(1)", nullable: false), TestDeviceId = table.Column(type: "bigint", nullable: true), ScheduledAt = table.Column(type: "datetime(6)", nullable: true), CreatedAt = table.Column(type: "datetime(6)", nullable: false), UpdatedAt = table.Column(type: "datetime(6)", nullable: false), StartedAt = table.Column(type: "datetime(6)", nullable: true), CompletedAt = table.Column(type: "datetime(6)", nullable: true), CancelledAt = table.Column(type: "datetime(6)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PushMessages", x => x.Id); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "UserPushPreferences", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), UserId = table.Column(type: "bigint", nullable: false), Category = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), IsEnabled = table.Column(type: "tinyint(1)", nullable: false), UpdatedAt = table.Column(type: "datetime(6)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_UserPushPreferences", x => x.Id); table.ForeignKey( name: "FK_UserPushPreferences_Users_UserId", column: x => x.UserId, principalTable: "Users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateTable( name: "PushDeliveries", columns: table => new { Id = table.Column(type: "bigint", nullable: false) .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), PushMessageId = table.Column(type: "bigint", nullable: false), PushDeviceId = table.Column(type: "bigint", nullable: false), UserId = table.Column(type: "bigint", nullable: false), Provider = table.Column(type: "varchar(16)", maxLength: 16, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), State = table.Column(type: "varchar(24)", maxLength: 24, nullable: false) .Annotation("MySql:CharSet", "utf8mb4"), AttemptCount = table.Column(type: "int", nullable: false), NextAttemptAt = table.Column(type: "datetime(6)", nullable: false), LeaseId = table.Column(type: "varchar(36)", maxLength: 36, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), LeaseExpiresAt = table.Column(type: "datetime(6)", nullable: true), ProviderMessageId = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), ErrorCode = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), ErrorMessage = table.Column(type: "varchar(400)", maxLength: 400, nullable: true) .Annotation("MySql:CharSet", "utf8mb4"), CreatedAt = table.Column(type: "datetime(6)", nullable: false), UpdatedAt = table.Column(type: "datetime(6)", nullable: false), AcceptedAt = table.Column(type: "datetime(6)", nullable: true) }, constraints: table => { table.PrimaryKey("PK_PushDeliveries", x => x.Id); table.ForeignKey( name: "FK_PushDeliveries_PushDevices_PushDeviceId", column: x => x.PushDeviceId, principalTable: "PushDevices", principalColumn: "Id", onDelete: ReferentialAction.Cascade); table.ForeignKey( name: "FK_PushDeliveries_PushMessages_PushMessageId", column: x => x.PushMessageId, principalTable: "PushMessages", principalColumn: "Id", onDelete: ReferentialAction.Cascade); }) .Annotation("MySql:CharSet", "utf8mb4"); migrationBuilder.CreateIndex( name: "IX_BudgetNotificationReceipts_BudgetId_Period_Threshold", table: "BudgetNotificationReceipts", columns: new[] { "BudgetId", "Period", "Threshold" }, unique: true); migrationBuilder.CreateIndex( name: "IX_BudgetNotificationReceipts_UserId_Period", table: "BudgetNotificationReceipts", columns: new[] { "UserId", "Period" }); migrationBuilder.CreateIndex( name: "IX_PushDeliveries_PushDeviceId", table: "PushDeliveries", column: "PushDeviceId"); migrationBuilder.CreateIndex( name: "IX_PushDeliveries_PushMessageId_PushDeviceId", table: "PushDeliveries", columns: new[] { "PushMessageId", "PushDeviceId" }, unique: true); migrationBuilder.CreateIndex( name: "IX_PushDeliveries_State_NextAttemptAt_LeaseExpiresAt", table: "PushDeliveries", columns: new[] { "State", "NextAttemptAt", "LeaseExpiresAt" }); migrationBuilder.CreateIndex( name: "IX_PushDevices_LastSeenAt", table: "PushDevices", column: "LastSeenAt"); migrationBuilder.CreateIndex( name: "IX_PushDevices_PackageName_InstallationId", table: "PushDevices", columns: new[] { "PackageName", "InstallationId" }, unique: true); migrationBuilder.CreateIndex( name: "IX_PushDevices_Provider_PackageName_TokenHash", table: "PushDevices", columns: new[] { "Provider", "PackageName", "TokenHash" }, unique: true); migrationBuilder.CreateIndex( name: "IX_PushDevices_UserId_IsActive", table: "PushDevices", columns: new[] { "UserId", "IsActive" }); migrationBuilder.CreateIndex( name: "IX_PushMessages_PublicId", table: "PushMessages", column: "PublicId", unique: true); migrationBuilder.CreateIndex( name: "IX_PushMessages_State_ScheduledAt", table: "PushMessages", columns: new[] { "State", "ScheduledAt" }); migrationBuilder.CreateIndex( name: "IX_PushMessages_TargetUserId_CreatedAt", table: "PushMessages", columns: new[] { "TargetUserId", "CreatedAt" }); migrationBuilder.CreateIndex( name: "IX_UserPushPreferences_UserId_Category", table: "UserPushPreferences", columns: new[] { "UserId", "Category" }, unique: true); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "BudgetNotificationReceipts"); migrationBuilder.DropTable( name: "PushDeliveries"); migrationBuilder.DropTable( name: "UserPushPreferences"); migrationBuilder.DropTable( name: "PushDevices"); migrationBuilder.DropTable( name: "PushMessages"); } } }