chore(migrations): add form_builder tables
Creates forms, form_submissions and all related block tables for the @payloadcms/plugin-form-builder integration. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
7223200d42
commit
5e998daa8d
3 changed files with 15195 additions and 0 deletions
14893
migrations/20260518_104929.json
Normal file
14893
migrations/20260518_104929.json
Normal file
File diff suppressed because it is too large
Load diff
296
migrations/20260518_104929.ts
Normal file
296
migrations/20260518_104929.ts
Normal file
|
|
@ -0,0 +1,296 @@
|
|||
import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres'
|
||||
|
||||
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
|
||||
await db.execute(sql`
|
||||
CREATE TYPE "public"."enum_forms_confirmation_type" AS ENUM('message', 'redirect');
|
||||
CREATE TYPE "public"."enum_forms_redirect_type" AS ENUM('reference', 'custom');
|
||||
CREATE TABLE "forms_blocks_checkbox" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"required" boolean,
|
||||
"default_value" boolean,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_email" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"required" boolean,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_message" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"message" jsonb,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_number" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"default_value" numeric,
|
||||
"required" boolean,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_select_options" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" varchar NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"label" varchar NOT NULL,
|
||||
"value" varchar NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_select" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"default_value" varchar,
|
||||
"placeholder" varchar,
|
||||
"required" boolean,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_text" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"default_value" varchar,
|
||||
"required" boolean,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_textarea" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"default_value" varchar,
|
||||
"required" boolean,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_radio_options" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" varchar NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"label" varchar NOT NULL,
|
||||
"value" varchar NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_radio" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"default_value" varchar,
|
||||
"required" boolean,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_blocks_date" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"_path" text NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"name" varchar NOT NULL,
|
||||
"label" varchar,
|
||||
"width" numeric,
|
||||
"required" boolean,
|
||||
"default_value" timestamp(3) with time zone,
|
||||
"block_name" varchar
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_emails" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"email_to" varchar,
|
||||
"cc" varchar,
|
||||
"bcc" varchar,
|
||||
"reply_to" varchar,
|
||||
"email_from" varchar,
|
||||
"subject" varchar DEFAULT 'You''ve received a new message.' NOT NULL,
|
||||
"message" jsonb
|
||||
);
|
||||
|
||||
CREATE TABLE "forms" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"title" varchar NOT NULL,
|
||||
"submit_button_label" varchar,
|
||||
"confirmation_type" "enum_forms_confirmation_type" DEFAULT 'message',
|
||||
"confirmation_message" jsonb,
|
||||
"redirect_type" "enum_forms_redirect_type" DEFAULT 'reference',
|
||||
"redirect_url" varchar,
|
||||
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "forms_rels" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"order" integer,
|
||||
"parent_id" integer NOT NULL,
|
||||
"path" varchar NOT NULL,
|
||||
"pages_id" integer
|
||||
);
|
||||
|
||||
CREATE TABLE "form_submissions_submission_data" (
|
||||
"_order" integer NOT NULL,
|
||||
"_parent_id" integer NOT NULL,
|
||||
"id" varchar PRIMARY KEY NOT NULL,
|
||||
"field" varchar NOT NULL,
|
||||
"value" varchar NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE "form_submissions" (
|
||||
"id" serial PRIMARY KEY NOT NULL,
|
||||
"form_id" integer NOT NULL,
|
||||
"updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL,
|
||||
"created_at" timestamp(3) with time zone DEFAULT now() NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "forms_id" integer;
|
||||
ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "form_submissions_id" integer;
|
||||
ALTER TABLE "forms_blocks_checkbox" ADD CONSTRAINT "forms_blocks_checkbox_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_email" ADD CONSTRAINT "forms_blocks_email_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_message" ADD CONSTRAINT "forms_blocks_message_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_number" ADD CONSTRAINT "forms_blocks_number_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_select_options" ADD CONSTRAINT "forms_blocks_select_options_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms_blocks_select"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_select" ADD CONSTRAINT "forms_blocks_select_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_text" ADD CONSTRAINT "forms_blocks_text_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_textarea" ADD CONSTRAINT "forms_blocks_textarea_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_radio_options" ADD CONSTRAINT "forms_blocks_radio_options_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms_blocks_radio"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_radio" ADD CONSTRAINT "forms_blocks_radio_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_blocks_date" ADD CONSTRAINT "forms_blocks_date_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_emails" ADD CONSTRAINT "forms_emails_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_rels" ADD CONSTRAINT "forms_rels_parent_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "forms_rels" ADD CONSTRAINT "forms_rels_pages_fk" FOREIGN KEY ("pages_id") REFERENCES "public"."pages"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "form_submissions_submission_data" ADD CONSTRAINT "form_submissions_submission_data_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."form_submissions"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "form_submissions" ADD CONSTRAINT "form_submissions_form_id_forms_id_fk" FOREIGN KEY ("form_id") REFERENCES "public"."forms"("id") ON DELETE set null ON UPDATE no action;
|
||||
CREATE INDEX "forms_blocks_checkbox_order_idx" ON "forms_blocks_checkbox" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_checkbox_parent_id_idx" ON "forms_blocks_checkbox" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_checkbox_path_idx" ON "forms_blocks_checkbox" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_email_order_idx" ON "forms_blocks_email" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_email_parent_id_idx" ON "forms_blocks_email" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_email_path_idx" ON "forms_blocks_email" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_message_order_idx" ON "forms_blocks_message" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_message_parent_id_idx" ON "forms_blocks_message" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_message_path_idx" ON "forms_blocks_message" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_number_order_idx" ON "forms_blocks_number" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_number_parent_id_idx" ON "forms_blocks_number" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_number_path_idx" ON "forms_blocks_number" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_select_options_order_idx" ON "forms_blocks_select_options" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_select_options_parent_id_idx" ON "forms_blocks_select_options" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_select_order_idx" ON "forms_blocks_select" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_select_parent_id_idx" ON "forms_blocks_select" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_select_path_idx" ON "forms_blocks_select" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_text_order_idx" ON "forms_blocks_text" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_text_parent_id_idx" ON "forms_blocks_text" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_text_path_idx" ON "forms_blocks_text" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_textarea_order_idx" ON "forms_blocks_textarea" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_textarea_parent_id_idx" ON "forms_blocks_textarea" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_textarea_path_idx" ON "forms_blocks_textarea" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_radio_options_order_idx" ON "forms_blocks_radio_options" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_radio_options_parent_id_idx" ON "forms_blocks_radio_options" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_radio_order_idx" ON "forms_blocks_radio" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_radio_parent_id_idx" ON "forms_blocks_radio" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_radio_path_idx" ON "forms_blocks_radio" USING btree ("_path");
|
||||
CREATE INDEX "forms_blocks_date_order_idx" ON "forms_blocks_date" USING btree ("_order");
|
||||
CREATE INDEX "forms_blocks_date_parent_id_idx" ON "forms_blocks_date" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_blocks_date_path_idx" ON "forms_blocks_date" USING btree ("_path");
|
||||
CREATE INDEX "forms_emails_order_idx" ON "forms_emails" USING btree ("_order");
|
||||
CREATE INDEX "forms_emails_parent_id_idx" ON "forms_emails" USING btree ("_parent_id");
|
||||
CREATE INDEX "forms_updated_at_idx" ON "forms" USING btree ("updated_at");
|
||||
CREATE INDEX "forms_created_at_idx" ON "forms" USING btree ("created_at");
|
||||
CREATE INDEX "forms_rels_order_idx" ON "forms_rels" USING btree ("order");
|
||||
CREATE INDEX "forms_rels_parent_idx" ON "forms_rels" USING btree ("parent_id");
|
||||
CREATE INDEX "forms_rels_path_idx" ON "forms_rels" USING btree ("path");
|
||||
CREATE INDEX "forms_rels_pages_id_idx" ON "forms_rels" USING btree ("pages_id");
|
||||
CREATE INDEX "form_submissions_submission_data_order_idx" ON "form_submissions_submission_data" USING btree ("_order");
|
||||
CREATE INDEX "form_submissions_submission_data_parent_id_idx" ON "form_submissions_submission_data" USING btree ("_parent_id");
|
||||
CREATE INDEX "form_submissions_form_idx" ON "form_submissions" USING btree ("form_id");
|
||||
CREATE INDEX "form_submissions_updated_at_idx" ON "form_submissions" USING btree ("updated_at");
|
||||
CREATE INDEX "form_submissions_created_at_idx" ON "form_submissions" USING btree ("created_at");
|
||||
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_forms_fk" FOREIGN KEY ("forms_id") REFERENCES "public"."forms"("id") ON DELETE cascade ON UPDATE no action;
|
||||
ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_form_submissions_fk" FOREIGN KEY ("form_submissions_id") REFERENCES "public"."form_submissions"("id") ON DELETE cascade ON UPDATE no action;
|
||||
CREATE INDEX "payload_locked_documents_rels_forms_id_idx" ON "payload_locked_documents_rels" USING btree ("forms_id");
|
||||
CREATE INDEX "payload_locked_documents_rels_form_submissions_id_idx" ON "payload_locked_documents_rels" USING btree ("form_submissions_id");`)
|
||||
}
|
||||
|
||||
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
|
||||
await db.execute(sql`
|
||||
ALTER TABLE "forms_blocks_checkbox" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_email" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_message" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_number" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_select_options" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_select" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_text" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_textarea" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_radio_options" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_radio" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_blocks_date" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_emails" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "forms_rels" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "form_submissions_submission_data" DISABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "form_submissions" DISABLE ROW LEVEL SECURITY;
|
||||
DROP TABLE "forms_blocks_checkbox" CASCADE;
|
||||
DROP TABLE "forms_blocks_email" CASCADE;
|
||||
DROP TABLE "forms_blocks_message" CASCADE;
|
||||
DROP TABLE "forms_blocks_number" CASCADE;
|
||||
DROP TABLE "forms_blocks_select_options" CASCADE;
|
||||
DROP TABLE "forms_blocks_select" CASCADE;
|
||||
DROP TABLE "forms_blocks_text" CASCADE;
|
||||
DROP TABLE "forms_blocks_textarea" CASCADE;
|
||||
DROP TABLE "forms_blocks_radio_options" CASCADE;
|
||||
DROP TABLE "forms_blocks_radio" CASCADE;
|
||||
DROP TABLE "forms_blocks_date" CASCADE;
|
||||
DROP TABLE "forms_emails" CASCADE;
|
||||
DROP TABLE "forms" CASCADE;
|
||||
DROP TABLE "forms_rels" CASCADE;
|
||||
DROP TABLE "form_submissions_submission_data" CASCADE;
|
||||
DROP TABLE "form_submissions" CASCADE;
|
||||
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_forms_fk";
|
||||
|
||||
ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_form_submissions_fk";
|
||||
|
||||
DROP INDEX "payload_locked_documents_rels_forms_id_idx";
|
||||
DROP INDEX "payload_locked_documents_rels_form_submissions_id_idx";
|
||||
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "forms_id";
|
||||
ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "form_submissions_id";
|
||||
DROP TYPE "public"."enum_forms_confirmation_type";
|
||||
DROP TYPE "public"."enum_forms_redirect_type";`)
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
import * as migration_20260515_153940 from './20260515_153940'
|
||||
import * as migration_20260515_162527 from './20260515_162527'
|
||||
import * as migration_20260518_104929 from './20260518_104929'
|
||||
|
||||
export const migrations = [
|
||||
{
|
||||
|
|
@ -12,4 +13,9 @@ export const migrations = [
|
|||
down: migration_20260515_162527.down,
|
||||
name: '20260515_162527',
|
||||
},
|
||||
{
|
||||
up: migration_20260518_104929.up,
|
||||
down: migration_20260518_104929.down,
|
||||
name: '20260518_104929',
|
||||
},
|
||||
]
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue