30 lines
1.2 KiB
SQL
30 lines
1.2 KiB
SQL
-- Add UserRole enum (MySQL ENUM)
|
|
ALTER TABLE `users` ADD COLUMN `username` VARCHAR(191) NULL;
|
|
ALTER TABLE `users` ADD COLUMN `role` ENUM('USER', 'ADMIN') NOT NULL DEFAULT 'USER';
|
|
|
|
-- Backfill username from email (use part before @, ensure uniqueness)
|
|
UPDATE `users` SET `username` = LOWER(SUBSTRING_INDEX(`email`, '@', 1)) WHERE `username` IS NULL;
|
|
|
|
-- Make username NOT NULL and add unique constraint
|
|
ALTER TABLE `users` MODIFY COLUMN `username` VARCHAR(191) NOT NULL;
|
|
ALTER TABLE `users` ADD UNIQUE INDEX `users_username_key`(`username`);
|
|
|
|
-- Create AuditLog table
|
|
CREATE TABLE `audit_logs` (
|
|
`id` VARCHAR(191) NOT NULL,
|
|
`userId` VARCHAR(191) NULL,
|
|
`action` VARCHAR(191) NOT NULL,
|
|
`entity` VARCHAR(191) NULL,
|
|
`entityId` VARCHAR(191) NULL,
|
|
`metadata` JSON NULL,
|
|
`ipAddress` VARCHAR(191) NULL,
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
|
|
INDEX `audit_logs_userId_idx`(`userId`),
|
|
INDEX `audit_logs_createdAt_idx`(`createdAt`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- Add foreign key from audit_logs to users
|
|
ALTER TABLE `audit_logs` ADD CONSTRAINT `audit_logs_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|