-- Form folders and directory folders with hierarchical structure CREATE TABLE IF NOT EXISTS form_folders ( id SERIAL PRIMARY KEY, organization_id INTEGER NOT NULL REFERENCES organizations(id) ON DELETE CASCADE, name VARCHAR(200) NOT NULL, parent_id INTEGER, position INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS form_folders_org_parent_idx ON form_folders(organization_id, parent_id); CREATE INDEX IF NOT EXISTS form_folders_position_idx ON form_folders(position); ALTER TABLE forms ADD COLUMN IF NOT EXISTS folder_id INTEGER; CREATE INDEX IF NOT EXISTS forms_folder_idx ON forms(folder_id); CREATE TABLE IF NOT EXISTS directory_folders ( id SERIAL PRIMARY KEY, organization_id INTEGER NOT NULL REFERENCES organizations(id) ON DELETE CASCADE, name VARCHAR(200) NOT NULL, parent_id INTEGER, position INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS directory_folders_org_parent_idx ON directory_folders(organization_id, parent_id); CREATE INDEX IF NOT EXISTS directory_folders_position_idx ON directory_folders(position); ALTER TABLE data_tables ADD COLUMN IF NOT EXISTS folder_id INTEGER; CREATE INDEX IF NOT EXISTS data_tables_folder_idx ON data_tables(folder_id);