73 lines
3.2 KiB
SQL
73 lines
3.2 KiB
SQL
-- 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 $$;
|