-- 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;