feat: add admin_users, admin_sessions, admin_audit_logs tables
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 13s
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 13s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
69dbf24237
commit
e5c6113b25
@ -0,0 +1,62 @@
|
||||
-- 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;
|
||||
@ -714,6 +714,63 @@ model BackupJob {
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
model AdminUser {
|
||||
id String @id @default(cuid())
|
||||
email String @unique @db.VarChar(255)
|
||||
passwordHash String @db.VarChar(255)
|
||||
displayName String @db.VarChar(100)
|
||||
role String @default("ADMIN") @db.VarChar(32)
|
||||
status String @default("ACTIVE") @db.VarChar(32)
|
||||
twoFactorEnabled Boolean @default(false)
|
||||
twoFactorSecret String? @db.VarChar(100)
|
||||
lastLoginAt DateTime?
|
||||
lastLoginIp String? @db.VarChar(45)
|
||||
failedLoginCount Int @default(0)
|
||||
lockedUntil DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
deletedAt DateTime?
|
||||
|
||||
sessions AdminSession[]
|
||||
|
||||
@@index([email])
|
||||
@@index([status])
|
||||
}
|
||||
|
||||
model AdminSession {
|
||||
id String @id @default(cuid())
|
||||
adminUserId String
|
||||
refreshTokenHash String @db.VarChar(255)
|
||||
ip String? @db.VarChar(45)
|
||||
userAgent String? @db.VarChar(500)
|
||||
expiresAt DateTime
|
||||
revokedAt DateTime?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
adminUser AdminUser @relation(fields: [adminUserId], references: [id])
|
||||
|
||||
@@index([adminUserId])
|
||||
@@index([refreshTokenHash])
|
||||
}
|
||||
|
||||
model AdminAuditLog {
|
||||
id String @id @default(cuid())
|
||||
adminUserId String
|
||||
action String @db.VarChar(64)
|
||||
resourceType String? @db.VarChar(64)
|
||||
resourceId String? @db.VarChar(255)
|
||||
beforeJson Json?
|
||||
afterJson Json?
|
||||
ip String? @db.VarChar(45)
|
||||
userAgent String? @db.VarChar(500)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
@@index([adminUserId])
|
||||
@@index([action])
|
||||
@@index([createdAt])
|
||||
}
|
||||
|
||||
model MembershipPlan {
|
||||
id String @id @default(cuid())
|
||||
code String @unique @db.VarChar(32)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user