69 lines
2.3 KiB
SQL
69 lines
2.3 KiB
SQL
-- 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;
|