Ctrl K
ComunidadGuías…

migrations/007_knowledge_bases_and_mcp_principals.sql

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
CREATE TABLE IF NOT EXISTS knowledge_bases (
  id BIGSERIAL PRIMARY KEY,
  slug TEXT NOT NULL UNIQUE,
  name TEXT NOT NULL,
  description TEXT,
  is_enabled BOOLEAN NOT NULL DEFAULT TRUE,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

INSERT INTO knowledge_bases (slug, name, description)
VALUES ('default', 'Default', 'Bestandsdokumente und globaler Wissensraum')
ON CONFLICT (slug) DO NOTHING;

ALTER TABLE documents
ADD COLUMN IF NOT EXISTS knowledge_base_id BIGINT REFERENCES knowledge_bases(id) ON DELETE SET NULL;

UPDATE documents
SET knowledge_base_id = kb.id
FROM knowledge_bases kb
WHERE kb.slug = 'default'
  AND documents.knowledge_base_id IS NULL;

CREATE INDEX IF NOT EXISTS idx_documents_knowledge_base_id ON documents(knowledge_base_id);

CREATE TABLE IF NOT EXISTS mcp_principals (
  id BIGSERIAL PRIMARY KEY,
  name TEXT NOT NULL UNIQUE,
  principal_type TEXT NOT NULL DEFAULT 'service_account',
  token_hash TEXT NOT NULL UNIQUE,
  token_preview TEXT NOT NULL,
  description TEXT,
  is_enabled BOOLEAN NOT NULL DEFAULT TRUE,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

CREATE TABLE IF NOT EXISTS principal_knowledge_bases (
  principal_id BIGINT NOT NULL REFERENCES mcp_principals(id) ON DELETE CASCADE,
  knowledge_base_id BIGINT NOT NULL REFERENCES knowledge_bases(id) ON DELETE CASCADE,
  PRIMARY KEY (principal_id, knowledge_base_id)
);

CREATE INDEX IF NOT EXISTS idx_principal_knowledge_bases_kb_id ON principal_knowledge_bases(knowledge_base_id);