ai-chatbot/lib/db/migrations/0053_add_agent_presets.sql
Your Name 4b820f8ff4
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
Add canvas agent mode and management
2026-03-10 19:56:25 +08:00

180 lines
7.6 KiB
SQL

CREATE TABLE IF NOT EXISTS "AgentPresetCategory" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"name" varchar(64) NOT NULL,
"slug" varchar(64) NOT NULL,
"scope" varchar(16) DEFAULT 'public' NOT NULL,
"createdBy" uuid,
"sortOrder" integer DEFAULT 0 NOT NULL,
"isEnabled" boolean DEFAULT true NOT NULL,
"createdAt" timestamp DEFAULT now() NOT NULL,
"updatedAt" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetCategory" ADD CONSTRAINT "AgentPresetCategory_createdBy_User_id_fk" FOREIGN KEY ("createdBy") REFERENCES "public"."User"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "AgentPreset" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"ownerUserId" uuid NOT NULL,
"name" varchar(128) NOT NULL,
"type" varchar(16) DEFAULT 'image' NOT NULL,
"visibility" varchar(16) DEFAULT 'private' NOT NULL,
"categoryId" uuid,
"promptTemplate" text DEFAULT '' NOT NULL,
"description" text,
"defaultModelId" uuid,
"defaultParams" jsonb,
"coverAssetId" uuid,
"status" varchar(16) DEFAULT 'active' NOT NULL,
"sortOrder" integer DEFAULT 0 NOT NULL,
"usageCount" integer DEFAULT 0 NOT NULL,
"lastUsedAt" timestamp,
"forkedFromPresetId" uuid,
"createdAt" timestamp DEFAULT now() NOT NULL,
"updatedAt" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPreset" ADD CONSTRAINT "AgentPreset_ownerUserId_User_id_fk" FOREIGN KEY ("ownerUserId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPreset" ADD CONSTRAINT "AgentPreset_categoryId_AgentPresetCategory_id_fk" FOREIGN KEY ("categoryId") REFERENCES "public"."AgentPresetCategory"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPreset" ADD CONSTRAINT "AgentPreset_defaultModelId_AiModel_id_fk" FOREIGN KEY ("defaultModelId") REFERENCES "public"."AiModel"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
ALTER TABLE "CanvasProject"
ADD COLUMN IF NOT EXISTS "workspaceType" varchar(16) DEFAULT 'canvas' NOT NULL;
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "AgentPresetExecutionSnapshot" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"presetId" uuid NOT NULL,
"projectId" uuid,
"chatId" uuid,
"messageId" uuid,
"userId" uuid NOT NULL,
"presetName" varchar(128) NOT NULL,
"presetType" varchar(16) NOT NULL,
"visibility" varchar(16) NOT NULL,
"categoryId" uuid,
"categoryName" varchar(64),
"promptTemplate" text DEFAULT '' NOT NULL,
"defaultModelId" uuid,
"resolvedModelId" uuid,
"defaultParams" jsonb,
"referenceAssetIds" jsonb DEFAULT '[]'::jsonb NOT NULL,
"referenceImageUrls" jsonb DEFAULT '[]'::jsonb NOT NULL,
"userInputText" text,
"requestPayload" jsonb,
"createdAt" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_presetId_AgentPreset_id_fk" FOREIGN KEY ("presetId") REFERENCES "public"."AgentPreset"("id") ON DELETE cascade ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_projectId_CanvasProject_id_fk" FOREIGN KEY ("projectId") REFERENCES "public"."CanvasProject"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_chatId_Chat_id_fk" FOREIGN KEY ("chatId") REFERENCES "public"."Chat"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_messageId_Message_v2_id_fk" FOREIGN KEY ("messageId") REFERENCES "public"."Message_v2"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_userId_User_id_fk" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE cascade ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_categoryId_AgentPresetCategory_id_fk" FOREIGN KEY ("categoryId") REFERENCES "public"."AgentPresetCategory"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_defaultModelId_AiModel_id_fk" FOREIGN KEY ("defaultModelId") REFERENCES "public"."AiModel"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetExecutionSnapshot" ADD CONSTRAINT "AgentPresetExecutionSnapshot_resolvedModelId_AiModel_id_fk" FOREIGN KEY ("resolvedModelId") REFERENCES "public"."AiModel"("id") ON DELETE set null ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
CREATE TABLE IF NOT EXISTS "AgentPresetReferenceAsset" (
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
"presetId" uuid NOT NULL,
"assetId" uuid NOT NULL,
"sortOrder" integer DEFAULT 0 NOT NULL,
"createdAt" timestamp DEFAULT now() NOT NULL
);
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetReferenceAsset" ADD CONSTRAINT "AgentPresetReferenceAsset_presetId_AgentPreset_id_fk" FOREIGN KEY ("presetId") REFERENCES "public"."AgentPreset"("id") ON DELETE cascade ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
DO $$ BEGIN
ALTER TABLE "AgentPresetReferenceAsset" ADD CONSTRAINT "AgentPresetReferenceAsset_assetId_MediaAsset_id_fk" FOREIGN KEY ("assetId") REFERENCES "public"."MediaAsset"("id") ON DELETE cascade ON UPDATE no action;
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPresetCategory_scope_sort_idx"
ON "AgentPresetCategory"("scope", "sortOrder", "name");
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPresetCategory_slug_scope_idx"
ON "AgentPresetCategory"("slug", "scope");
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPreset_owner_visibility_idx"
ON "AgentPreset"("ownerUserId", "visibility", "updatedAt");
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPreset_category_visibility_idx"
ON "AgentPreset"("categoryId", "visibility", "updatedAt");
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPreset_type_visibility_idx"
ON "AgentPreset"("type", "visibility", "updatedAt");
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPresetExecutionSnapshot_preset_created_idx"
ON "AgentPresetExecutionSnapshot"("presetId", "createdAt");
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPresetExecutionSnapshot_user_created_idx"
ON "AgentPresetExecutionSnapshot"("userId", "createdAt");
--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "AgentPresetReferenceAsset_preset_sort_idx"
ON "AgentPresetReferenceAsset"("presetId", "sortOrder");