Files
AIclinicalresearch/backend/prisma/migrations/20260128_add_system_knowledge_base/migration.sql

123 lines
4.8 KiB
SQL

-- =============================================
-- FIX: Create prompt_templates and prompt_versions tables if they don't exist
-- Background: These tables were originally created via `prisma db push`
-- (bypassing migrations), causing shadow database validation failures.
-- This fix ensures migrations can replay cleanly from scratch.
-- =============================================
-- Create PromptStatus enum if not exists
DO $$ BEGIN
CREATE TYPE "capability_schema"."PromptStatus" AS ENUM ('DRAFT', 'ACTIVE', 'ARCHIVED');
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- CreateTable: prompt_templates (if not exists)
CREATE TABLE IF NOT EXISTS "capability_schema"."prompt_templates" (
"id" SERIAL NOT NULL,
"code" TEXT NOT NULL,
"name" TEXT NOT NULL,
"module" TEXT NOT NULL,
"description" TEXT,
"variables" JSONB,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "prompt_templates_pkey" PRIMARY KEY ("id")
);
-- CreateIndex (if not exists)
CREATE UNIQUE INDEX IF NOT EXISTS "prompt_templates_code_key" ON "capability_schema"."prompt_templates"("code");
CREATE INDEX IF NOT EXISTS "idx_prompt_templates_module" ON "capability_schema"."prompt_templates"("module");
-- CreateTable: prompt_versions (if not exists)
CREATE TABLE IF NOT EXISTS "capability_schema"."prompt_versions" (
"id" SERIAL NOT NULL,
"template_id" INTEGER NOT NULL,
"version" INTEGER NOT NULL,
"content" TEXT NOT NULL,
"model_config" JSONB,
"status" "capability_schema"."PromptStatus" NOT NULL DEFAULT 'DRAFT',
"changelog" TEXT,
"created_by" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "prompt_versions_pkey" PRIMARY KEY ("id")
);
-- CreateIndex (if not exists)
CREATE INDEX IF NOT EXISTS "idx_prompt_versions_template_status" ON "capability_schema"."prompt_versions"("template_id", "status");
CREATE INDEX IF NOT EXISTS "idx_prompt_versions_status" ON "capability_schema"."prompt_versions"("status");
-- AddForeignKey (if not exists)
DO $$ BEGIN
ALTER TABLE "capability_schema"."prompt_versions"
ADD CONSTRAINT "prompt_versions_template_id_fkey"
FOREIGN KEY ("template_id") REFERENCES "capability_schema"."prompt_templates"("id")
ON DELETE RESTRICT ON UPDATE CASCADE;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- =============================================
-- Original migration content starts here
-- =============================================
-- Add knowledge_config field to prompt_templates (if not exists)
DO $$ BEGIN
ALTER TABLE "capability_schema"."prompt_templates" ADD COLUMN "knowledge_config" JSONB;
EXCEPTION
WHEN duplicate_column THEN null;
END $$;
-- CreateTable: system_knowledge_bases
CREATE TABLE IF NOT EXISTS "capability_schema"."system_knowledge_bases" (
"id" TEXT NOT NULL,
"code" VARCHAR(50) NOT NULL,
"name" VARCHAR(100) NOT NULL,
"description" TEXT,
"category" VARCHAR(50),
"document_count" INTEGER NOT NULL DEFAULT 0,
"total_tokens" INTEGER NOT NULL DEFAULT 0,
"status" VARCHAR(20) NOT NULL DEFAULT 'active',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "system_knowledge_bases_pkey" PRIMARY KEY ("id")
);
-- CreateTable: system_kb_documents
CREATE TABLE IF NOT EXISTS "capability_schema"."system_kb_documents" (
"id" TEXT NOT NULL,
"kb_id" TEXT NOT NULL,
"filename" VARCHAR(255) NOT NULL,
"file_path" VARCHAR(500),
"file_size" INTEGER,
"file_type" VARCHAR(50),
"content" TEXT,
"token_count" INTEGER NOT NULL DEFAULT 0,
"status" VARCHAR(20) NOT NULL DEFAULT 'pending',
"error_message" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "system_kb_documents_pkey" PRIMARY KEY ("id")
);
-- CreateIndex (if not exists)
CREATE UNIQUE INDEX IF NOT EXISTS "system_knowledge_bases_code_key" ON "capability_schema"."system_knowledge_bases"("code");
CREATE INDEX IF NOT EXISTS "idx_system_kb_category" ON "capability_schema"."system_knowledge_bases"("category");
CREATE INDEX IF NOT EXISTS "idx_system_kb_status" ON "capability_schema"."system_knowledge_bases"("status");
CREATE INDEX IF NOT EXISTS "idx_system_kb_docs_kb_id" ON "capability_schema"."system_kb_documents"("kb_id");
CREATE INDEX IF NOT EXISTS "idx_system_kb_docs_status" ON "capability_schema"."system_kb_documents"("status");
-- AddForeignKey (if not exists)
DO $$ BEGIN
ALTER TABLE "capability_schema"."system_kb_documents"
ADD CONSTRAINT "system_kb_documents_kb_id_fkey"
FOREIGN KEY ("kb_id") REFERENCES "capability_schema"."system_knowledge_bases"("id")
ON DELETE CASCADE ON UPDATE CASCADE;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;