-- Make AI prompt templates global; assign to websites via join + pack public id. CREATE TABLE IF NOT EXISTS domain_ai_prompt_templates ( domain_id BIGINT NOT NULL REFERENCES domains (id) ON DELETE CASCADE, template_id BIGINT NOT NULL REFERENCES ai_prompt_templates (id) ON DELETE CASCADE, sort_order INT NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), PRIMARY KEY (domain_id, template_id) ); CREATE INDEX IF NOT EXISTS idx_domain_ai_prompt_templates_template_id ON domain_ai_prompt_templates (template_id); ALTER TABLE domains ADD COLUMN IF NOT EXISTS ai_prompts_public_id VARCHAR(32); DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_constraint WHERE conname = 'domains_ai_prompts_public_id_unique' ) THEN ALTER TABLE domains ADD CONSTRAINT domains_ai_prompts_public_id_unique UNIQUE (ai_prompts_public_id); END IF; END $$; -- Preserve any existing per-domain template links (from 075). DO $$ BEGIN IF EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'ai_prompt_templates' AND column_name = 'domain_id' ) THEN INSERT INTO domain_ai_prompt_templates (domain_id, template_id, sort_order) SELECT domain_id, id, 0 FROM ai_prompt_templates WHERE domain_id IS NOT NULL ON CONFLICT DO NOTHING; UPDATE domains d SET ai_prompts_public_id = t.public_id FROM ( SELECT DISTINCT ON (domain_id) domain_id, public_id FROM ai_prompt_templates WHERE public_id IS NOT NULL ORDER BY domain_id, id ) t WHERE d.id = t.domain_id AND d.ai_prompts_public_id IS NULL; END IF; END $$; ALTER TABLE ai_prompt_templates DROP COLUMN IF EXISTS domain_id; ALTER TABLE ai_prompt_templates DROP COLUMN IF EXISTS public_id;