Files
Moniki_uslugi/apps/cms/src/lib/ensure-pages-schema.ts
T

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 $$
`,
)
}