-- migrate:up -- Tabla para almacenar prompts editables por tenant con versionado CREATE TABLE prompt_templates ( id SERIAL PRIMARY KEY, tenant_id UUID NOT NULL REFERENCES tenants(id) ON DELETE CASCADE, prompt_key VARCHAR(50) NOT NULL, -- 'router', 'greeting', 'orders', 'shipping', 'payment', 'browse' content TEXT NOT NULL, model VARCHAR(50) DEFAULT 'gpt-4-turbo', version INTEGER NOT NULL DEFAULT 1, is_active BOOLEAN DEFAULT true, created_at TIMESTAMPTZ DEFAULT NOW(), created_by TEXT, -- email o identificador del usuario que creó el prompt CONSTRAINT uq_prompt_version UNIQUE(tenant_id, prompt_key, version) ); -- Índice para búsqueda rápida del prompt activo CREATE INDEX idx_prompt_active ON prompt_templates(tenant_id, prompt_key) WHERE is_active = true; -- Índice para listar versiones CREATE INDEX idx_prompt_versions ON prompt_templates(tenant_id, prompt_key, version DESC); -- Función para auto-incrementar versión al insertar CREATE OR REPLACE FUNCTION increment_prompt_version() RETURNS TRIGGER AS $$ BEGIN -- Calcular siguiente versión NEW.version := COALESCE( (SELECT MAX(version) + 1 FROM prompt_templates WHERE tenant_id = NEW.tenant_id AND prompt_key = NEW.prompt_key), 1 ); RETURN NEW; END; $$ LANGUAGE plpgsql; -- Trigger para auto-versión CREATE TRIGGER prompt_version_trigger BEFORE INSERT ON prompt_templates FOR EACH ROW EXECUTE FUNCTION increment_prompt_version(); -- migrate:down DROP TRIGGER IF EXISTS prompt_version_trigger ON prompt_templates; DROP FUNCTION IF EXISTS increment_prompt_version(); DROP INDEX IF EXISTS idx_prompt_versions; DROP INDEX IF EXISTS idx_prompt_active; DROP TABLE IF EXISTS prompt_templates;