51 lines
1.7 KiB
PL/PgSQL
51 lines
1.7 KiB
PL/PgSQL
-- 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;
|