veza/veza-backend-api/migrations/061_migrate_admin_tables_to_uuid.sql

74 lines
3.2 KiB
MySQL
Raw Normal View History

2025-12-03 19:29:37 +00:00
-- Migration: Ensure AuditLog and AdminSettings use UUIDs
-- Date: 2024-11-30
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
-- ==========================================
-- TABLE: audit_logs
-- ==========================================
DO $$
BEGIN
-- Check if audit_logs exists
IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'audit_logs') THEN
-- Check if user_id exists and is NOT uuid
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'audit_logs' AND column_name = 'user_id' AND data_type NOT IN ('uuid')) THEN
RAISE NOTICE 'Converting audit_logs.user_id to UUID. Warning: Old integer IDs will be lost (TRUNCATE).';
-- We truncate because we cannot map old int IDs to new UUIDs without the mapping table (which might be gone)
TRUNCATE TABLE audit_logs;
ALTER TABLE audit_logs DROP COLUMN IF EXISTS user_id;
ALTER TABLE audit_logs ADD COLUMN user_id UUID;
-- Also migrate ID if it's int
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'audit_logs' AND column_name = 'id' AND data_type NOT IN ('uuid')) THEN
ALTER TABLE audit_logs DROP CONSTRAINT IF EXISTS audit_logs_pkey;
ALTER TABLE audit_logs DROP COLUMN IF EXISTS id;
ALTER TABLE audit_logs ADD COLUMN id UUID PRIMARY KEY DEFAULT gen_random_uuid();
END IF;
-- ResourceID
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'audit_logs' AND column_name = 'resource_id' AND data_type NOT IN ('uuid')) THEN
ALTER TABLE audit_logs DROP COLUMN IF EXISTS resource_id;
ALTER TABLE audit_logs ADD COLUMN resource_id UUID;
END IF;
END IF;
END IF;
END $$;
-- ==========================================
-- TABLE: admin_settings
-- ==========================================
-- Create if not exists
CREATE TABLE IF NOT EXISTS admin_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
key VARCHAR(255) NOT NULL UNIQUE,
value TEXT,
type VARCHAR(50),
description TEXT,
category VARCHAR(50),
is_public BOOLEAN DEFAULT false,
updated_by UUID,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- If it exists but has int ID
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'admin_settings' AND column_name = 'id' AND data_type NOT IN ('uuid')) THEN
ALTER TABLE admin_settings ADD COLUMN id_uuid UUID DEFAULT gen_random_uuid();
ALTER TABLE admin_settings DROP CONSTRAINT IF EXISTS admin_settings_pkey;
ALTER TABLE admin_settings DROP COLUMN id;
ALTER TABLE admin_settings RENAME COLUMN id_uuid TO id;
ALTER TABLE admin_settings ADD PRIMARY KEY (id);
END IF;
IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'admin_settings' AND column_name = 'updated_by' AND data_type NOT IN ('uuid')) THEN
ALTER TABLE admin_settings DROP COLUMN updated_by;
ALTER TABLE admin_settings ADD COLUMN updated_by UUID;
END IF;
END $$;