-- CreateTable CREATE TABLE `AdminUser` ( `id` VARCHAR(191) NOT NULL, `email` VARCHAR(255) NOT NULL, `passwordHash` VARCHAR(255) NOT NULL, `displayName` VARCHAR(100) NOT NULL, `role` VARCHAR(32) NOT NULL DEFAULT 'ADMIN', `status` VARCHAR(32) NOT NULL DEFAULT 'ACTIVE', `twoFactorEnabled` BOOLEAN NOT NULL DEFAULT false, `twoFactorSecret` VARCHAR(100) NULL, `lastLoginAt` DATETIME(3) NULL, `lastLoginIp` VARCHAR(45) NULL, `failedLoginCount` INTEGER NOT NULL DEFAULT 0, `lockedUntil` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, `deletedAt` DATETIME(3) NULL, UNIQUE INDEX `AdminUser_email_key`(`email`), INDEX `AdminUser_email_idx`(`email`), INDEX `AdminUser_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AdminSession` ( `id` VARCHAR(191) NOT NULL, `adminUserId` VARCHAR(191) NOT NULL, `refreshTokenHash` VARCHAR(255) NOT NULL, `ip` VARCHAR(45) NULL, `userAgent` VARCHAR(500) NULL, `expiresAt` DATETIME(3) NOT NULL, `revokedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `AdminSession_adminUserId_idx`(`adminUserId`), INDEX `AdminSession_refreshTokenHash_idx`(`refreshTokenHash`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AdminAuditLog` ( `id` VARCHAR(191) NOT NULL, `adminUserId` VARCHAR(191) NOT NULL, `action` VARCHAR(64) NOT NULL, `resourceType` VARCHAR(64) NULL, `resourceId` VARCHAR(255) NULL, `beforeJson` JSON NULL, `afterJson` JSON NULL, `ip` VARCHAR(45) NULL, `userAgent` VARCHAR(500) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `AdminAuditLog_adminUserId_idx`(`adminUserId`), INDEX `AdminAuditLog_action_idx`(`action`), INDEX `AdminAuditLog_createdAt_idx`(`createdAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `AdminSession` ADD CONSTRAINT `AdminSession_adminUserId_fkey` FOREIGN KEY (`adminUserId`) REFERENCES `AdminUser`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;