import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres' export async function up({ db, payload, req }: MigrateUpArgs): Promise { await db.execute(sql` CREATE TABLE "users_tenants" ( "_order" integer NOT NULL, "_parent_id" integer NOT NULL, "id" varchar PRIMARY KEY NOT NULL, "tenant_id" integer NOT NULL ); CREATE TABLE "tenants_domains" ( "_order" integer NOT NULL, "_parent_id" integer NOT NULL, "id" varchar PRIMARY KEY NOT NULL, "domain" varchar NOT NULL ); CREATE TABLE "tenants" ( "id" serial PRIMARY KEY NOT NULL, "name" varchar NOT NULL, "slug" varchar 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 "media" ADD COLUMN "tenant_id" integer; ALTER TABLE "payload_locked_documents_rels" ADD COLUMN "tenants_id" integer; ALTER TABLE "users_tenants" ADD CONSTRAINT "users_tenants_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action; ALTER TABLE "users_tenants" ADD CONSTRAINT "users_tenants_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; ALTER TABLE "tenants_domains" ADD CONSTRAINT "tenants_domains_parent_id_fk" FOREIGN KEY ("_parent_id") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action; CREATE INDEX "users_tenants_order_idx" ON "users_tenants" USING btree ("_order"); CREATE INDEX "users_tenants_parent_id_idx" ON "users_tenants" USING btree ("_parent_id"); CREATE INDEX "users_tenants_tenant_idx" ON "users_tenants" USING btree ("tenant_id"); CREATE INDEX "tenants_domains_order_idx" ON "tenants_domains" USING btree ("_order"); CREATE INDEX "tenants_domains_parent_id_idx" ON "tenants_domains" USING btree ("_parent_id"); CREATE UNIQUE INDEX "tenants_slug_idx" ON "tenants" USING btree ("slug"); CREATE INDEX "tenants_updated_at_idx" ON "tenants" USING btree ("updated_at"); CREATE INDEX "tenants_created_at_idx" ON "tenants" USING btree ("created_at"); ALTER TABLE "media" ADD CONSTRAINT "media_tenant_id_tenants_id_fk" FOREIGN KEY ("tenant_id") REFERENCES "public"."tenants"("id") ON DELETE set null ON UPDATE no action; ALTER TABLE "payload_locked_documents_rels" ADD CONSTRAINT "payload_locked_documents_rels_tenants_fk" FOREIGN KEY ("tenants_id") REFERENCES "public"."tenants"("id") ON DELETE cascade ON UPDATE no action; CREATE INDEX "media_tenant_idx" ON "media" USING btree ("tenant_id"); CREATE INDEX "payload_locked_documents_rels_tenants_id_idx" ON "payload_locked_documents_rels" USING btree ("tenants_id");`) } export async function down({ db, payload, req }: MigrateDownArgs): Promise { await db.execute(sql` ALTER TABLE "users_tenants" DISABLE ROW LEVEL SECURITY; ALTER TABLE "tenants_domains" DISABLE ROW LEVEL SECURITY; ALTER TABLE "tenants" DISABLE ROW LEVEL SECURITY; DROP TABLE "users_tenants" CASCADE; DROP TABLE "tenants_domains" CASCADE; DROP TABLE "tenants" CASCADE; ALTER TABLE "media" DROP CONSTRAINT "media_tenant_id_tenants_id_fk"; ALTER TABLE "payload_locked_documents_rels" DROP CONSTRAINT "payload_locked_documents_rels_tenants_fk"; DROP INDEX "media_tenant_idx"; DROP INDEX "payload_locked_documents_rels_tenants_id_idx"; ALTER TABLE "media" DROP COLUMN "tenant_id"; ALTER TABLE "payload_locked_documents_rels" DROP COLUMN "tenants_id";`) }