import { sql } from '@payloadcms/db-postgres' import type { Payload } from 'payload' type DrizzleAdapter = { drizzle: { execute: (query: unknown) => Promise } } async function exec(payload: Payload, query: unknown) { const adapter = payload.db as DrizzleAdapter await adapter.drizzle.execute(query) } export async function ensurePagesSchema(payload: Payload) { await exec( payload, sql` DO $$ BEGIN CREATE TYPE enum_pages_section AS ENUM ('organization', 'useful'); EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages ( id serial PRIMARY KEY, slug character varying NOT NULL, section enum_pages_section NOT NULL DEFAULT 'organization', sort_order numeric DEFAULT 100, show_in_footer boolean DEFAULT true, is_published boolean DEFAULT true, source_url character varying, cta_href character varying, updated_at timestamp(3) with time zone NOT NULL DEFAULT now(), created_at timestamp(3) with time zone NOT NULL DEFAULT now() ) `, ) await exec(payload, sql`ALTER TABLE pages ADD COLUMN IF NOT EXISTS slug character varying`) await exec(payload, sql`ALTER TABLE pages ADD COLUMN IF NOT EXISTS section enum_pages_section DEFAULT 'organization'`) await exec(payload, sql`ALTER TABLE pages ADD COLUMN IF NOT EXISTS sort_order numeric DEFAULT 100`) await exec(payload, sql`ALTER TABLE pages ADD COLUMN IF NOT EXISTS show_in_footer boolean DEFAULT true`) await exec(payload, sql`ALTER TABLE pages ADD COLUMN IF NOT EXISTS is_published boolean DEFAULT true`) await exec(payload, sql`ALTER TABLE pages ADD COLUMN IF NOT EXISTS source_url character varying`) await exec(payload, sql`ALTER TABLE pages ADD COLUMN IF NOT EXISTS cta_href character varying`) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_locales ( id serial PRIMARY KEY, title character varying NOT NULL, heading character varying, subtitle character varying, content jsonb, notice character varying, cta_hint character varying, cta_label character varying, timeline_title character varying, table_caption character varying, _locale _locales NOT NULL, _parent_id integer NOT NULL ) `, ) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS title character varying`) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS heading character varying`) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS subtitle character varying`) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS content jsonb`) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS notice character varying`) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS cta_hint character varying`) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS cta_label character varying`) await exec(payload, sql`ALTER TABLE pages_locales ADD COLUMN IF NOT EXISTS table_caption character varying`) await exec(payload, sql`CREATE UNIQUE INDEX IF NOT EXISTS pages_slug_idx ON pages (slug)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_created_at_idx ON pages (created_at)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_updated_at_idx ON pages (updated_at)`) await exec( payload, sql` CREATE UNIQUE INDEX IF NOT EXISTS pages_locales_locale_parent_id_unique ON pages_locales (_locale, _parent_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_locales ADD CONSTRAINT pages_locales_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_facts ( _order integer NOT NULL, _parent_id integer NOT NULL, id character varying NOT NULL, PRIMARY KEY (id) ) `, ) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_facts_order_idx ON pages_facts (_order)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_facts_parent_id_idx ON pages_facts (_parent_id)`) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_facts ADD CONSTRAINT pages_facts_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_facts_locales ( label character varying NOT NULL, value character varying NOT NULL, id serial PRIMARY KEY, _locale _locales NOT NULL, _parent_id character varying NOT NULL ) `, ) await exec( payload, sql` CREATE UNIQUE INDEX IF NOT EXISTS pages_facts_locales_locale_parent_id_unique ON pages_facts_locales (_locale, _parent_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_facts_locales ADD CONSTRAINT pages_facts_locales_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages_facts(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_timeline ( _order integer NOT NULL, _parent_id integer NOT NULL, id character varying NOT NULL, year character varying, PRIMARY KEY (id) ) `, ) await exec(payload, sql`ALTER TABLE pages_timeline ADD COLUMN IF NOT EXISTS year character varying`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_timeline_order_idx ON pages_timeline (_order)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_timeline_parent_id_idx ON pages_timeline (_parent_id)`) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_timeline ADD CONSTRAINT pages_timeline_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_timeline_locales ( text character varying, id serial PRIMARY KEY, _locale _locales NOT NULL, _parent_id character varying NOT NULL ) `, ) await exec(payload, sql`ALTER TABLE pages_timeline_locales ADD COLUMN IF NOT EXISTS text character varying`) await exec( payload, sql` CREATE UNIQUE INDEX IF NOT EXISTS pages_timeline_locales_locale_parent_id_unique ON pages_timeline_locales (_locale, _parent_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_timeline_locales ADD CONSTRAINT pages_timeline_locales_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages_timeline(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_people ( _order integer NOT NULL, _parent_id integer NOT NULL, id character varying NOT NULL, name character varying, photo_id integer, photo_url character varying, PRIMARY KEY (id) ) `, ) await exec(payload, sql`ALTER TABLE pages_people ADD COLUMN IF NOT EXISTS name character varying`) await exec(payload, sql`ALTER TABLE pages_people ADD COLUMN IF NOT EXISTS photo_id integer`) await exec(payload, sql`ALTER TABLE pages_people ADD COLUMN IF NOT EXISTS photo_url character varying`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_people_order_idx ON pages_people (_order)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_people_parent_id_idx ON pages_people (_parent_id)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_people_photo_idx ON pages_people (photo_id)`) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_people ADD CONSTRAINT pages_people_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_people ADD CONSTRAINT pages_people_photo_id_media_id_fk FOREIGN KEY (photo_id) REFERENCES media(id) ON DELETE SET NULL; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_people_locales ( position character varying, degree character varying, hours character varying, address character varying, id serial PRIMARY KEY, _locale _locales NOT NULL, _parent_id character varying NOT NULL ) `, ) await exec(payload, sql`ALTER TABLE pages_people_locales ADD COLUMN IF NOT EXISTS position character varying`) await exec(payload, sql`ALTER TABLE pages_people_locales ADD COLUMN IF NOT EXISTS degree character varying`) await exec(payload, sql`ALTER TABLE pages_people_locales ADD COLUMN IF NOT EXISTS hours character varying`) await exec(payload, sql`ALTER TABLE pages_people_locales ADD COLUMN IF NOT EXISTS address character varying`) await exec( payload, sql` CREATE UNIQUE INDEX IF NOT EXISTS pages_people_locales_locale_parent_id_unique ON pages_people_locales (_locale, _parent_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_people_locales ADD CONSTRAINT pages_people_locales_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages_people(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_cards ( _order integer NOT NULL, _parent_id integer NOT NULL, id character varying NOT NULL, status character varying, number character varying, issued_at character varying, phone character varying, email character varying, href character varying, PRIMARY KEY (id) ) `, ) await exec(payload, sql`ALTER TABLE pages_cards ADD COLUMN IF NOT EXISTS status character varying`) await exec(payload, sql`ALTER TABLE pages_cards ADD COLUMN IF NOT EXISTS number character varying`) await exec(payload, sql`ALTER TABLE pages_cards ADD COLUMN IF NOT EXISTS issued_at character varying`) await exec(payload, sql`ALTER TABLE pages_cards ADD COLUMN IF NOT EXISTS phone character varying`) await exec(payload, sql`ALTER TABLE pages_cards ADD COLUMN IF NOT EXISTS email character varying`) await exec(payload, sql`ALTER TABLE pages_cards ADD COLUMN IF NOT EXISTS href character varying`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_cards_order_idx ON pages_cards (_order)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_cards_parent_id_idx ON pages_cards (_parent_id)`) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_cards ADD CONSTRAINT pages_cards_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_cards_locales ( title character varying, role character varying, authority character varying, activity character varying, extract character varying, address character varying, link_label character varying, id serial PRIMARY KEY, _locale _locales NOT NULL, _parent_id character varying NOT NULL ) `, ) await exec(payload, sql`ALTER TABLE pages_cards_locales ADD COLUMN IF NOT EXISTS title character varying`) await exec(payload, sql`ALTER TABLE pages_cards_locales ADD COLUMN IF NOT EXISTS role character varying`) await exec(payload, sql`ALTER TABLE pages_cards_locales ADD COLUMN IF NOT EXISTS authority character varying`) await exec(payload, sql`ALTER TABLE pages_cards_locales ADD COLUMN IF NOT EXISTS activity character varying`) await exec(payload, sql`ALTER TABLE pages_cards_locales ADD COLUMN IF NOT EXISTS extract character varying`) await exec(payload, sql`ALTER TABLE pages_cards_locales ADD COLUMN IF NOT EXISTS address character varying`) await exec(payload, sql`ALTER TABLE pages_cards_locales ADD COLUMN IF NOT EXISTS link_label character varying`) await exec( payload, sql` CREATE UNIQUE INDEX IF NOT EXISTS pages_cards_locales_locale_parent_id_unique ON pages_cards_locales (_locale, _parent_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_cards_locales ADD CONSTRAINT pages_cards_locales_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages_cards(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_faq ( _order integer NOT NULL, _parent_id integer NOT NULL, id character varying NOT NULL, PRIMARY KEY (id) ) `, ) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_faq_order_idx ON pages_faq (_order)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_faq_parent_id_idx ON pages_faq (_parent_id)`) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_faq ADD CONSTRAINT pages_faq_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_faq_locales ( question character varying, answer character varying, id serial PRIMARY KEY, _locale _locales NOT NULL, _parent_id character varying NOT NULL ) `, ) await exec(payload, sql`ALTER TABLE pages_faq_locales ADD COLUMN IF NOT EXISTS question character varying`) await exec(payload, sql`ALTER TABLE pages_faq_locales ADD COLUMN IF NOT EXISTS answer character varying`) await exec( payload, sql` CREATE UNIQUE INDEX IF NOT EXISTS pages_faq_locales_locale_parent_id_unique ON pages_faq_locales (_locale, _parent_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_faq_locales ADD CONSTRAINT pages_faq_locales_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages_faq(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_table_rows ( _order integer NOT NULL, _parent_id integer NOT NULL, id character varying NOT NULL, PRIMARY KEY (id) ) `, ) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_table_rows_order_idx ON pages_table_rows (_order)`) await exec(payload, sql`CREATE INDEX IF NOT EXISTS pages_table_rows_parent_id_idx ON pages_table_rows (_parent_id)`) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_table_rows ADD CONSTRAINT pages_table_rows_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` CREATE TABLE IF NOT EXISTS pages_table_rows_locales ( category character varying, condition character varying, discount character varying, documents character varying, id serial PRIMARY KEY, _locale _locales NOT NULL, _parent_id character varying NOT NULL ) `, ) await exec(payload, sql`ALTER TABLE pages_table_rows_locales ADD COLUMN IF NOT EXISTS category character varying`) await exec(payload, sql`ALTER TABLE pages_table_rows_locales ADD COLUMN IF NOT EXISTS condition character varying`) await exec(payload, sql`ALTER TABLE pages_table_rows_locales ADD COLUMN IF NOT EXISTS discount character varying`) await exec(payload, sql`ALTER TABLE pages_table_rows_locales ADD COLUMN IF NOT EXISTS documents character varying`) await exec( payload, sql` CREATE UNIQUE INDEX IF NOT EXISTS pages_table_rows_locales_locale_parent_id_unique ON pages_table_rows_locales (_locale, _parent_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE pages_table_rows_locales ADD CONSTRAINT pages_table_rows_locales_parent_id_fk FOREIGN KEY (_parent_id) REFERENCES pages_table_rows(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) await exec( payload, sql` ALTER TABLE payload_locked_documents_rels ADD COLUMN IF NOT EXISTS pages_id integer `, ) await exec( payload, sql` CREATE INDEX IF NOT EXISTS payload_locked_documents_rels_pages_id_idx ON payload_locked_documents_rels (pages_id) `, ) await exec( payload, sql` DO $$ BEGIN ALTER TABLE payload_locked_documents_rels ADD CONSTRAINT payload_locked_documents_rels_pages_fk FOREIGN KEY (pages_id) REFERENCES pages(id) ON DELETE CASCADE; EXCEPTION WHEN duplicate_object THEN NULL; END $$ `, ) }