515 lines
17 KiB
TypeScript
515 lines
17 KiB
TypeScript
import { sql } from '@payloadcms/db-postgres'
|
|
import type { Payload } from 'payload'
|
|
|
|
type DrizzleAdapter = {
|
|
drizzle: { execute: (query: unknown) => Promise<unknown> }
|
|
}
|
|
|
|
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 $$
|
|
`,
|
|
)
|
|
}
|