From 9bb041bd7c1f368e23acc37c63d8a5e48796744b Mon Sep 17 00:00:00 2001 From: Martin Porwoll Date: Mon, 16 Feb 2026 14:30:04 +0000 Subject: [PATCH] fix(blocks): add database migration for CardGridBlock icon fields Adds missing columns (media_type, icon, icon_position) to pages_blocks_card_grid_block_cards table. Without this migration, pages API returns 500 on production. Co-Authored-By: Claude Opus 4.6 --- ...260216_150000_add_card_grid_icon_fields.ts | 46 +++++++++++++++++++ src/migrations/index.ts | 6 +++ 2 files changed, 52 insertions(+) create mode 100644 src/migrations/20260216_150000_add_card_grid_icon_fields.ts diff --git a/src/migrations/20260216_150000_add_card_grid_icon_fields.ts b/src/migrations/20260216_150000_add_card_grid_icon_fields.ts new file mode 100644 index 0000000..59169a7 --- /dev/null +++ b/src/migrations/20260216_150000_add_card_grid_icon_fields.ts @@ -0,0 +1,46 @@ +import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres' + +export async function up({ db }: MigrateUpArgs): Promise { + // Add enum for mediaType + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "enum_pages_blocks_card_grid_block_cards_media_type" AS ENUM('none', 'image', 'icon'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + // Add enum for iconPosition + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "enum_pages_blocks_card_grid_block_cards_icon_position" AS ENUM('top', 'left'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + // Add columns to card-grid-block cards array table + await db.execute(sql` + ALTER TABLE "pages_blocks_card_grid_block_cards" + ADD COLUMN IF NOT EXISTS "media_type" "enum_pages_blocks_card_grid_block_cards_media_type" DEFAULT 'none', + ADD COLUMN IF NOT EXISTS "icon" varchar, + ADD COLUMN IF NOT EXISTS "icon_position" "enum_pages_blocks_card_grid_block_cards_icon_position" DEFAULT 'top'; + `) +} + +export async function down({ db }: MigrateDownArgs): Promise { + await db.execute(sql` + ALTER TABLE "pages_blocks_card_grid_block_cards" + DROP COLUMN IF EXISTS "media_type", + DROP COLUMN IF EXISTS "icon", + DROP COLUMN IF EXISTS "icon_position"; + `) + + await db.execute(sql` + DROP TYPE IF EXISTS "enum_pages_blocks_card_grid_block_cards_media_type"; + `) + + await db.execute(sql` + DROP TYPE IF EXISTS "enum_pages_blocks_card_grid_block_cards_icon_position"; + `) +} diff --git a/src/migrations/index.ts b/src/migrations/index.ts index 062d60f..81364b7 100644 --- a/src/migrations/index.ts +++ b/src/migrations/index.ts @@ -36,6 +36,7 @@ import * as migration_20260114_200000_fix_community_role_enum from './20260114_2 import * as migration_20260116_100000_add_token_notification_fields from './20260116_100000_add_token_notification_fields'; import * as migration_20260116_120000_add_report_schedules from './20260116_120000_add_report_schedules'; import * as migration_20260215_120000_add_monitoring_collections from './20260215_120000_add_monitoring_collections'; +import * as migration_20260216_150000_add_card_grid_icon_fields from './20260216_150000_add_card_grid_icon_fields'; export const migrations = [ { @@ -228,4 +229,9 @@ export const migrations = [ down: migration_20260215_120000_add_monitoring_collections.down, name: '20260215_120000_add_monitoring_collections' }, + { + up: migration_20260216_150000_add_card_grid_icon_fields.up, + down: migration_20260216_150000_add_card_grid_icon_fields.down, + name: '20260216_150000_add_card_grid_icon_fields' + }, ];