feat(core): implement robust db:reset with content snapshotting
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
import { getPayload } from 'payload'
|
||||
import configPromise from '../src/payload.config'
|
||||
import fs from 'fs'
|
||||
import path from 'path'
|
||||
|
||||
async function run() {
|
||||
console.log('Connecting to Payload Local API...')
|
||||
const payload = await getPayload({ config: configPromise })
|
||||
|
||||
const locales = ['pl', 'de']
|
||||
|
||||
const snapshot: Record<string, any> = {
|
||||
pages: [],
|
||||
globals: {
|
||||
header: {},
|
||||
footer: {},
|
||||
company: {},
|
||||
'site-settings': {}
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Fetch all pages in all locales
|
||||
console.log('Exporting pages...')
|
||||
const plPages = await payload.find({
|
||||
collection: 'pages',
|
||||
locale: 'pl',
|
||||
limit: 100,
|
||||
depth: 0,
|
||||
})
|
||||
|
||||
const dePages = await payload.find({
|
||||
collection: 'pages',
|
||||
locale: 'de',
|
||||
limit: 100,
|
||||
depth: 0,
|
||||
})
|
||||
|
||||
// We combine them by ID
|
||||
for (const plPage of plPages.docs) {
|
||||
const dePage = dePages.docs.find(p => p.id === plPage.id)
|
||||
snapshot.pages.push({
|
||||
id: plPage.id,
|
||||
pl: plPage,
|
||||
de: dePage
|
||||
})
|
||||
}
|
||||
|
||||
// 2. Fetch globals
|
||||
console.log('Exporting globals...')
|
||||
const globalsList = ['header', 'footer', 'company', 'site-settings']
|
||||
for (const slug of globalsList) {
|
||||
const plGlobal = await payload.findGlobal({
|
||||
slug: slug as any,
|
||||
locale: 'pl',
|
||||
depth: 0
|
||||
})
|
||||
const deGlobal = await payload.findGlobal({
|
||||
slug: slug as any,
|
||||
locale: 'de',
|
||||
depth: 0
|
||||
})
|
||||
snapshot.globals[slug] = {
|
||||
pl: plGlobal,
|
||||
de: deGlobal
|
||||
}
|
||||
}
|
||||
|
||||
const outputPath = path.join(process.cwd(), 'scripts', 'content-snapshot.json')
|
||||
fs.writeFileSync(outputPath, JSON.stringify(snapshot, null, 2))
|
||||
|
||||
console.log(`Snapshot saved to ${outputPath}`)
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
try {
|
||||
await run()
|
||||
} catch (err) {
|
||||
console.error('ERROR during export:', err)
|
||||
process.exit(1)
|
||||
}
|
||||
Reference in New Issue
Block a user