CREATE TABLE IF NOT EXISTS "AssetMemorySnapshot" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "userId" uuid NOT NULL, "assetId" uuid, "chatId" uuid, "projectId" uuid, "snapshotType" varchar(32) DEFAULT 'visual_summary' NOT NULL, "status" varchar(32) DEFAULT 'ready' NOT NULL, "normalizedUrl" text NOT NULL, "summaryText" text, "subjectTags" jsonb DEFAULT '[]'::jsonb NOT NULL, "sceneTags" jsonb DEFAULT '[]'::jsonb NOT NULL, "styleTags" jsonb DEFAULT '[]'::jsonb NOT NULL, "lightingTags" jsonb DEFAULT '[]'::jsonb NOT NULL, "confidence" integer DEFAULT 0 NOT NULL, "sourceModelId" varchar(128), "metadata" jsonb, "createdAt" timestamp DEFAULT now() NOT NULL, "updatedAt" timestamp DEFAULT now() NOT NULL ); --> statement-breakpoint DO $$ BEGIN ALTER TABLE "AssetMemorySnapshot" ADD CONSTRAINT "AssetMemorySnapshot_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 "AssetMemorySnapshot" ADD CONSTRAINT "AssetMemorySnapshot_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 DO $$ BEGIN ALTER TABLE "AssetMemorySnapshot" ADD CONSTRAINT "AssetMemorySnapshot_chatId_Chat_id_fk" FOREIGN KEY ("chatId") REFERENCES "public"."Chat"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "AssetMemorySnapshot" ADD CONSTRAINT "AssetMemorySnapshot_projectId_CanvasProject_id_fk" FOREIGN KEY ("projectId") REFERENCES "public"."CanvasProject"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint CREATE UNIQUE INDEX IF NOT EXISTS "AssetMemorySnapshot_user_url_type_uidx" ON "AssetMemorySnapshot"("userId", "normalizedUrl", "snapshotType"); --> statement-breakpoint CREATE INDEX IF NOT EXISTS "AssetMemorySnapshot_asset_type_idx" ON "AssetMemorySnapshot"("assetId", "snapshotType"); --> statement-breakpoint CREATE INDEX IF NOT EXISTS "AssetMemorySnapshot_chat_created_idx" ON "AssetMemorySnapshot"("chatId", "createdAt"); --> statement-breakpoint CREATE INDEX IF NOT EXISTS "AssetMemorySnapshot_project_created_idx" ON "AssetMemorySnapshot"("projectId", "createdAt");