Files
klz-cables.com/.pnpm-store/v10/files/e1/e00bbf082355cd05e49fa2997ce2ce4caec31cbaef1399a712383b3626c2e4f12ca93cafbe3aa2dd0fbc45e60215856bf8dc4d25ddbb25d991578428cbb45a
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

1 line
17 KiB
Plaintext

{"version":3,"sources":["../../../../../src/versions/migrations/localizeStatus/sql/up.ts"],"sourcesContent":["import type { Payload } from '../../../../types/index.js'\n\nimport { calculateVersionLocaleStatuses, toSnakeCase } from '../shared.js'\nimport { migrateMainCollectionStatus } from './migrateMainCollection.js'\nimport { migrateMainGlobalStatus } from './migrateMainGlobal.js'\n\nexport type LocalizeStatusArgs = {\n collectionSlug?: string\n db: any\n globalSlug?: string\n payload: Payload\n req?: any\n sql: any\n}\n\nexport async function up(args: LocalizeStatusArgs): Promise<void> {\n const { collectionSlug, db, globalSlug, payload, req, sql } = args\n\n if (!collectionSlug && !globalSlug) {\n throw new Error('Either collectionSlug or globalSlug must be provided')\n }\n\n if (collectionSlug && globalSlug) {\n throw new Error('Cannot provide both collectionSlug and globalSlug')\n }\n\n const entitySlug = collectionSlug || globalSlug\n // Convert camelCase slugs to snake_case and add version prefix/suffix\n const versionsTable = collectionSlug\n ? `_${toSnakeCase(collectionSlug)}_v`\n : `_${toSnakeCase(globalSlug!)}_v`\n const localesTable = `${versionsTable}_locales`\n\n if (!payload.config.localization) {\n throw new Error('Localization is not enabled in payload config')\n }\n\n // Check if versions are enabled on this collection/global\n let entityConfig\n if (collectionSlug) {\n const collection = payload.config.collections.find((c) => c.slug === collectionSlug)\n if (collection) {\n entityConfig = collection\n }\n } else if (globalSlug) {\n const global = payload.config.globals.find((g) => g.slug === globalSlug)\n if (global) {\n entityConfig = global\n }\n }\n\n if (!entityConfig) {\n throw new Error(\n `${collectionSlug ? 'Collection' : 'Global'} not found: ${collectionSlug || globalSlug}`,\n )\n }\n\n payload.logger.info({\n msg: `Starting _status localization migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug}`,\n })\n\n // Get filtered locales if filterAvailableLocales is defined\n let locales = payload.config.localization.localeCodes\n if (typeof payload.config.localization.filterAvailableLocales === 'function') {\n const filteredLocaleObjects = await payload.config.localization.filterAvailableLocales({\n locales: payload.config.localization.locales,\n req,\n })\n locales = filteredLocaleObjects.map((locale) => locale.code)\n }\n payload.logger.info({ msg: `Locales: ${locales.join(', ')}` })\n\n // Check if versions are enabled in config (skip if not)\n if (!entityConfig.versions) {\n payload.logger.info({\n msg: `Skipping migration for ${collectionSlug ? 'collection' : 'global'}: ${entitySlug} - versions not enabled`,\n })\n return\n }\n\n // Validate that version__status column exists before proceeding\n const columnCheckResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = ${versionsTable}\n AND column_name = 'version__status'\n ) as exists\n `,\n })\n\n if (!columnCheckResult.rows[0]?.exists) {\n throw new Error(\n `Migration aborted: version__status column not found in ${versionsTable} table. ` +\n `This migration should only run on schemas that have NOT yet been migrated to per-locale status. ` +\n `If you've already run this migration, no action is needed.`,\n )\n }\n\n // 1. Check if the locales table exists\n const localesTableCheckResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_name = ${localesTable}\n ) as exists\n `,\n })\n\n const localesTableExists = localesTableCheckResult.rows[0]?.exists\n\n if (!localesTableExists) {\n // SCENARIO 1: Create the locales table (first localized field in versions)\n payload.logger.info({ msg: `Creating new locales table: ${localesTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n CREATE TABLE ${sql.identifier(localesTable)} (\n id SERIAL PRIMARY KEY,\n _locale VARCHAR NOT NULL,\n _parent_id INTEGER NOT NULL,\n version__status VARCHAR,\n UNIQUE(_locale, _parent_id),\n FOREIGN KEY (_parent_id) REFERENCES ${sql.identifier(versionsTable)}(id) ON DELETE CASCADE\n )\n `,\n })\n\n // Create one row per locale per version record\n // Simple approach: copy the same status to all locales\n for (const locale of locales) {\n const inserted = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n INSERT INTO ${sql.identifier(localesTable)} (_locale, _parent_id, version__status)\n SELECT ${locale}, id, version__status\n FROM ${sql.identifier(versionsTable)}\n RETURNING id\n `,\n })\n payload.logger.info({\n msg: `Inserted ${inserted.length} rows for locale: ${locale}`,\n })\n }\n } else {\n // SCENARIO 2: Add version__status column to existing locales table\n payload.logger.info({ msg: `Adding version__status column to existing table: ${localesTable}` })\n\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(localesTable)} ADD COLUMN version__status VARCHAR\n `,\n })\n\n // INTELLIGENT DATA MIGRATION using historical publishedLocale data\n payload.logger.info({ msg: 'Processing version history to determine status per locale...' })\n\n // First, get the list of locales that actually exist in the locales table\n // This is important because the config may have more locales defined than what's in the OLD schema\n const existingLocalesResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT DISTINCT _locale\n FROM ${sql.identifier(localesTable)}\n ORDER BY _locale\n `,\n })\n const existingLocales = existingLocalesResult.rows.map((row: any) => row._locale as string)\n payload.logger.info({\n msg: `Found existing locales in table: ${existingLocales.join(', ')}`,\n })\n\n // Get all version records grouped by parent document, ordered chronologically\n const versionsResult = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT id, parent_id as parent, version__status as _status, published_locale, snapshot, created_at\n FROM ${sql.identifier(versionsTable)}\n ORDER BY parent_id, created_at ASC\n `,\n })\n\n // Use shared function to calculate version locale statuses\n // Only process locales that actually exist in the locales table\n const versionLocaleStatus = calculateVersionLocaleStatuses(\n versionsResult.rows,\n existingLocales,\n payload,\n )\n\n // Now update the locales table with the calculated status for each version\n payload.logger.info({ msg: 'Updating locales table with calculated statuses...' })\n\n let updateCount = 0\n for (const [versionId, localeMap] of versionLocaleStatus.entries()) {\n for (const [locale, status] of localeMap.entries()) {\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n UPDATE ${sql.identifier(localesTable)}\n SET version__status = ${status}\n WHERE _parent_id = ${versionId}\n AND _locale = ${locale}\n `,\n })\n updateCount++\n }\n }\n\n payload.logger.info({ msg: `Updated ${updateCount} locale rows with status` })\n }\n\n // 3. Drop the old version__status column from main versions table\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(versionsTable)} DROP COLUMN version__status\n `,\n })\n\n // 4. Create and populate _status column in main collection/global locales table\n // With localizeStatus enabled, _status is a localized field stored in the collection's locales table\n // We need to create this column and populate it based on the latest version status per locale\n const mainTable = collectionSlug ? toSnakeCase(collectionSlug) : toSnakeCase(globalSlug!)\n const mainLocalesTable = `${mainTable}_locales`\n\n const localesTableCheck = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.tables\n WHERE table_schema = 'public'\n AND table_name = ${mainLocalesTable}\n ) as exists\n `,\n })\n\n if (localesTableCheck.rows[0]?.exists) {\n // Check if _status column already exists in the locales table\n const statusColumnCheck = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = ${mainLocalesTable}\n AND column_name = '_status'\n ) as exists\n `,\n })\n\n if (!statusColumnCheck.rows[0]?.exists) {\n // Add _status column to locales table\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(mainLocalesTable)}\n ADD COLUMN _status VARCHAR DEFAULT 'draft'\n `,\n })\n }\n\n // Now populate the _status values from the latest version\n if (collectionSlug) {\n await migrateMainCollectionStatus({\n collectionSlug,\n db,\n locales,\n payload,\n sql,\n versionsTable,\n })\n } else if (globalSlug) {\n await migrateMainGlobalStatus({ db, globalSlug, locales, payload, sql, versionsTable })\n }\n } else {\n payload.logger.info({\n msg: `No locales table found: ${mainLocalesTable} (collection/global not localized)`,\n })\n }\n\n // 5. Drop _status from main table if it exists (it will be in locales table now)\n const mainTableStatusCheck = await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n SELECT EXISTS (\n SELECT FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = ${mainTable}\n AND column_name = '_status'\n ) as exists\n `,\n })\n\n if (mainTableStatusCheck.rows[0]?.exists) {\n await db.execute({\n drizzle: db.drizzle,\n sql: sql`\n ALTER TABLE ${sql.identifier(mainTable)} DROP COLUMN _status\n `,\n })\n }\n\n payload.logger.info({ msg: 'Migration completed successfully' })\n}\n"],"names":["calculateVersionLocaleStatuses","toSnakeCase","migrateMainCollectionStatus","migrateMainGlobalStatus","up","args","collectionSlug","db","globalSlug","payload","req","sql","Error","entitySlug","versionsTable","localesTable","config","localization","entityConfig","collection","collections","find","c","slug","global","globals","g","logger","info","msg","locales","localeCodes","filterAvailableLocales","filteredLocaleObjects","map","locale","code","join","versions","columnCheckResult","execute","drizzle","rows","exists","localesTableCheckResult","localesTableExists","identifier","inserted","length","existingLocalesResult","existingLocales","row","_locale","versionsResult","versionLocaleStatus","updateCount","versionId","localeMap","entries","status","mainTable","mainLocalesTable","localesTableCheck","statusColumnCheck","mainTableStatusCheck"],"mappings":"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"}