-- CreateTable CREATE TABLE `Tenant` ( `id` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `code` VARCHAR(191) NOT NULL, `enabled` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Tenant_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `User` ( `id` VARCHAR(191) NOT NULL, `username` VARCHAR(191) NOT NULL, `passwordHash` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `phone` VARCHAR(191) NULL, `email` VARCHAR(191) NULL, `status` ENUM('ACTIVE', 'DISABLED') NOT NULL DEFAULT 'ACTIVE', `tenantId` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `User_username_key`(`username`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Role` ( `id` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `code` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NULL, `tenantId` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Role_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Permission` ( `id` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `code` VARCHAR(191) NOT NULL, `type` ENUM('MENU', 'BUTTON', 'API') NOT NULL, `parentId` VARCHAR(191) NULL, `path` VARCHAR(191) NULL, `sort` INTEGER NOT NULL DEFAULT 0, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Permission_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UserRole` ( `userId` VARCHAR(191) NOT NULL, `roleId` VARCHAR(191) NOT NULL, PRIMARY KEY (`userId`, `roleId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `RolePermission` ( `roleId` VARCHAR(191) NOT NULL, `permissionId` VARCHAR(191) NOT NULL, PRIMARY KEY (`roleId`, `permissionId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Region` ( `id` VARCHAR(191) NOT NULL, `code` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `level` INTEGER NOT NULL, `parentId` VARCHAR(191) NULL, `longitude` DECIMAL(10, 6) NULL, `latitude` DECIMAL(10, 6) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Region_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UserRegionScope` ( `userId` VARCHAR(191) NOT NULL, `regionId` VARCHAR(191) NOT NULL, PRIMARY KEY (`userId`, `regionId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `RoleRegionScope` ( `roleId` VARCHAR(191) NOT NULL, `regionId` VARCHAR(191) NOT NULL, PRIMARY KEY (`roleId`, `regionId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `StreetLamp` ( `id` VARCHAR(191) NOT NULL, `code` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `tenantId` VARCHAR(191) NULL, `regionId` VARCHAR(191) NOT NULL, `address` VARCHAR(191) NULL, `longitude` DECIMAL(10, 6) NOT NULL, `latitude` DECIMAL(10, 6) NOT NULL, `deviceType` VARCHAR(191) NULL, `status` ENUM('NORMAL', 'FAULT', 'MAINTENANCE', 'OFFLINE') NOT NULL DEFAULT 'NORMAL', `onlineStatus` ENUM('ONLINE', 'OFFLINE') NOT NULL DEFAULT 'ONLINE', `lastReportedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `StreetLamp_code_key`(`code`), INDEX `StreetLamp_regionId_idx`(`regionId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Alarm` ( `id` VARCHAR(191) NOT NULL, `sourceAlarmId` VARCHAR(191) NULL, `tenantId` VARCHAR(191) NULL, `lampId` VARCHAR(191) NOT NULL, `regionId` VARCHAR(191) NOT NULL, `type` VARCHAR(191) NOT NULL, `title` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NULL, `level` ENUM('LOW', 'MEDIUM', 'HIGH', 'CRITICAL') NOT NULL DEFAULT 'MEDIUM', `status` ENUM('OPEN', 'PROCESSING', 'RESOLVED', 'IGNORED') NOT NULL DEFAULT 'OPEN', `occurredAt` DATETIME(3) NOT NULL, `recoveredAt` DATETIME(3) NULL, `handledAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Alarm_sourceAlarmId_key`(`sourceAlarmId`), INDEX `Alarm_regionId_status_idx`(`regionId`, `status`), INDEX `Alarm_lampId_idx`(`lampId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AlarmEvent` ( `id` VARCHAR(191) NOT NULL, `alarmId` VARCHAR(191) NOT NULL, `eventType` VARCHAR(191) NOT NULL, `payload` JSON NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AlarmHandleRecord` ( `id` VARCHAR(191) NOT NULL, `alarmId` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NULL, `action` VARCHAR(191) NOT NULL, `remark` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `OperationLog` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NULL, `action` VARCHAR(191) NOT NULL, `resource` VARCHAR(191) NOT NULL, `detail` JSON NULL, `ip` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `User` ADD CONSTRAINT `User_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `Tenant`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Role` ADD CONSTRAINT `Role_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `Tenant`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserRole` ADD CONSTRAINT `UserRole_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserRole` ADD CONSTRAINT `UserRole_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `Role`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RolePermission` ADD CONSTRAINT `RolePermission_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `Role`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RolePermission` ADD CONSTRAINT `RolePermission_permissionId_fkey` FOREIGN KEY (`permissionId`) REFERENCES `Permission`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Region` ADD CONSTRAINT `Region_parentId_fkey` FOREIGN KEY (`parentId`) REFERENCES `Region`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserRegionScope` ADD CONSTRAINT `UserRegionScope_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserRegionScope` ADD CONSTRAINT `UserRegionScope_regionId_fkey` FOREIGN KEY (`regionId`) REFERENCES `Region`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RoleRegionScope` ADD CONSTRAINT `RoleRegionScope_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `Role`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RoleRegionScope` ADD CONSTRAINT `RoleRegionScope_regionId_fkey` FOREIGN KEY (`regionId`) REFERENCES `Region`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `StreetLamp` ADD CONSTRAINT `StreetLamp_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `Tenant`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `StreetLamp` ADD CONSTRAINT `StreetLamp_regionId_fkey` FOREIGN KEY (`regionId`) REFERENCES `Region`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Alarm` ADD CONSTRAINT `Alarm_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `Tenant`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Alarm` ADD CONSTRAINT `Alarm_lampId_fkey` FOREIGN KEY (`lampId`) REFERENCES `StreetLamp`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Alarm` ADD CONSTRAINT `Alarm_regionId_fkey` FOREIGN KEY (`regionId`) REFERENCES `Region`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `AlarmEvent` ADD CONSTRAINT `AlarmEvent_alarmId_fkey` FOREIGN KEY (`alarmId`) REFERENCES `Alarm`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `AlarmHandleRecord` ADD CONSTRAINT `AlarmHandleRecord_alarmId_fkey` FOREIGN KEY (`alarmId`) REFERENCES `Alarm`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `AlarmHandleRecord` ADD CONSTRAINT `AlarmHandleRecord_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;