-- Database initialization script for Virtual Board Member AI System -- Create extensions CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE EXTENSION IF NOT EXISTS "pg_trgm"; -- Create custom types DO $$ BEGIN CREATE TYPE user_role AS ENUM ( 'board_member', 'executive', 'executive_assistant', 'analyst', 'auditor', 'admin' ); EXCEPTION WHEN duplicate_object THEN null; END $$; DO $$ BEGIN CREATE TYPE document_type AS ENUM ( 'report', 'presentation', 'minutes', 'financial', 'legal', 'other' ); EXCEPTION WHEN duplicate_object THEN null; END $$; DO $$ BEGIN CREATE TYPE commitment_status AS ENUM ( 'pending', 'in_progress', 'completed', 'overdue', 'cancelled' ); EXCEPTION WHEN duplicate_object THEN null; END $$; -- Create indexes for better performance CREATE INDEX IF NOT EXISTS idx_users_email ON users(email); CREATE INDEX IF NOT EXISTS idx_users_username ON users(username); CREATE INDEX IF NOT EXISTS idx_users_role ON users(role); CREATE INDEX IF NOT EXISTS idx_documents_created_at ON documents(created_at); CREATE INDEX IF NOT EXISTS idx_documents_type ON documents(document_type); CREATE INDEX IF NOT EXISTS idx_commitments_deadline ON commitments(deadline); CREATE INDEX IF NOT EXISTS idx_commitments_status ON commitments(status); CREATE INDEX IF NOT EXISTS idx_audit_logs_timestamp ON audit_logs(timestamp); CREATE INDEX IF NOT EXISTS idx_audit_logs_user_id ON audit_logs(user_id); -- Create full-text search indexes CREATE INDEX IF NOT EXISTS idx_documents_content_fts ON documents USING gin(to_tsvector('english', content)); CREATE INDEX IF NOT EXISTS idx_commitments_description_fts ON commitments USING gin(to_tsvector('english', description)); -- Create trigram indexes for fuzzy search CREATE INDEX IF NOT EXISTS idx_documents_title_trgm ON documents USING gin(title gin_trgm_ops); CREATE INDEX IF NOT EXISTS idx_commitments_description_trgm ON commitments USING gin(description gin_trgm_ops); -- Grant permissions GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO vbm_user; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO vbm_user; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO vbm_user;