CREATE TABLE IF NOT EXISTS "workflow_edge" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "version" text DEFAULT '0.1.0' NOT NULL, "workflow_id" uuid NOT NULL, "source" uuid NOT NULL, "target" uuid NOT NULL, "ui_config" json DEFAULT '{}'::json, "created_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "workflow_node" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "version" text DEFAULT '0.1.0' NOT NULL, "workflow_id" uuid NOT NULL, "kind" text NOT NULL, "name" text NOT NULL, "description" text, "ui_config" json DEFAULT '{}'::json, "node_config" json DEFAULT '{}'::json, "created_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, "updated_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL ); --> statement-breakpoint CREATE TABLE IF NOT EXISTS "workflow" ( "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL, "version" text DEFAULT '0.1.0' NOT NULL, "name" text NOT NULL, "icon" json, "description" text, "is_published" boolean DEFAULT false NOT NULL, "visibility" varchar DEFAULT 'private' NOT NULL, "user_id" uuid NOT NULL, "created_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, "updated_at" timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL ); --> statement-breakpoint DO $$ BEGIN ALTER TABLE "workflow_edge" ADD CONSTRAINT "workflow_edge_workflow_id_workflow_id_fk" FOREIGN KEY ("workflow_id") REFERENCES "public"."workflow"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "workflow_edge" ADD CONSTRAINT "workflow_edge_source_workflow_node_id_fk" FOREIGN KEY ("source") REFERENCES "public"."workflow_node"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "workflow_edge" ADD CONSTRAINT "workflow_edge_target_workflow_node_id_fk" FOREIGN KEY ("target") REFERENCES "public"."workflow_node"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "workflow_node" ADD CONSTRAINT "workflow_node_workflow_id_workflow_id_fk" FOREIGN KEY ("workflow_id") REFERENCES "public"."workflow"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint DO $$ BEGIN ALTER TABLE "workflow" ADD CONSTRAINT "workflow_user_id_user_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."user"("id") ON DELETE cascade ON UPDATE no action; EXCEPTION WHEN duplicate_object THEN null; END $$; --> statement-breakpoint CREATE INDEX IF NOT EXISTS "workflow_node_kind_idx" ON "workflow_node" USING btree ("kind");