turash/bugulma/backend/migrations/postgres/016_enhance_users_table.up.sql

49 lines
1.6 KiB
SQL
Executable File

-- Enhance users table with role, permissions, and activity tracking
-- Migration: 016_enhance_users_table.up.sql
-- Add role column (if not exists)
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'role') THEN
ALTER TABLE users ADD COLUMN role VARCHAR(50) DEFAULT 'user';
END IF;
END $$;
-- Add permissions column (JSONB array)
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'permissions') THEN
ALTER TABLE users ADD COLUMN permissions JSONB DEFAULT '[]'::jsonb;
END IF;
END $$;
-- Add last_login_at column
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'last_login_at') THEN
ALTER TABLE users ADD COLUMN last_login_at TIMESTAMP WITH TIME ZONE;
END IF;
END $$;
-- Add is_active column
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_name = 'users' AND column_name = 'is_active') THEN
ALTER TABLE users ADD COLUMN is_active BOOLEAN DEFAULT TRUE;
END IF;
END $$;
-- Create indexes
CREATE INDEX IF NOT EXISTS idx_users_role ON users(role);
CREATE INDEX IF NOT EXISTS idx_users_is_active ON users(is_active);
CREATE INDEX IF NOT EXISTS idx_users_last_login_at ON users(last_login_at);
-- Update existing users to have default role
UPDATE users SET role = 'user' WHERE role IS NULL;
UPDATE users SET is_active = TRUE WHERE is_active IS NULL;