feat: Add fresh database setup script and media handling improvements

- Introduced a new script for setting up a fresh database with ordered migration tasks.
- Added a utility function to find media by filename, improving media handling in various scripts.
- Updated preload scripts to utilize the new media fetching utility.
- Refactored datenschutz, impressum, and mitglied-werden fields to use stable IDs and anchor IDs.
- Enhanced home and network pages to accommodate new field structures.
- Added new preload script for global CMS settings.
- Improved code readability and organization across multiple files.
This commit is contained in:
syntaxbullet
2026-06-22 17:20:45 +02:00
parent 09a43062a0
commit 9545f2513d
30 changed files with 359 additions and 171 deletions

View File

@@ -0,0 +1,67 @@
import 'dotenv/config'
import config from '@payload-config'
import { getPayload, type Payload } from 'payload'
import { mediaByFilename } from './mediaByFilename'
import { defaultFooterData, defaultHeaderData } from '@/spa/cmsNavigation'
import { defaultSiteSettings } from '@/spa/siteSettings'
async function main() {
const payload = await getPayload({ config })
const [logo, ewifLogo, partnerLogos, skylineImage] = await Promise.all([
mediaByFilename(payload, 'bmp-logo.png'),
mediaByFilename(payload, 'ewif-logo.png'),
mediaByFilename(payload, 'partner-logos.png'),
mediaByFilename(payload, 'munich-skyline.jpg'),
])
const { logo: _headerLogo, languages, ...headerData } = defaultHeaderData
const { logo: _footerLogo, partnerLogos: _defaultPartnerLogos, ...footerData } = defaultFooterData
const { skylineImageUrl: _skylineImageUrl, ...siteSettingsData } = defaultSiteSettings
await Promise.all([
payload.updateGlobal({
slug: 'header',
context: { disableRevalidate: true },
data: {
...headerData,
logo,
languages: languages.map((label) => ({ label })),
} as never,
}),
payload.updateGlobal({
slug: 'footer',
context: { disableRevalidate: true },
data: {
...footerData,
logo,
partnerLogos: [
{ alt: 'EWIF – Europäisches Wirtschaftsforum', image: ewifLogo },
{
alt: 'Hochschule für angewandtes Management · Gipfeldialog Altaussee',
image: partnerLogos,
},
].filter((item) => item.image),
} as never,
}),
payload.updateGlobal({
slug: 'site-settings',
context: { disableRevalidate: true },
data: {
...siteSettingsData,
skylineImage,
} as never,
}),
])
payload.logger.info('Preloaded global CMS settings.')
await payload.destroy()
process.exit(0)
}
main().catch((error) => {
console.error(error)
process.exit(1)
})