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");