diff --git a/scripts/fix-i18n-data.js b/scripts/fix-i18n-data.js new file mode 100644 index 0000000..5cbcf87 --- /dev/null +++ b/scripts/fix-i18n-data.js @@ -0,0 +1,140 @@ +#!/usr/bin/env node + +// Fix-Skript für i18n-Daten in der bestehenden Datenbank. +// Hintergrund: Ältere Datenbanken speichern Genre-/Special-/News-Texte +// als einfache Strings ("Rock"), während das aktuelle Schema JSON erwartet, +// z.B. { "de": "Rock", "en": "Rock" }. +// +// Dieses Skript: +// - liest alle Datensätze +// - erkennt Felder, die noch einfache Strings sind +// - konvertiert sie in das erwartete JSON-Format + +const { PrismaClient } = require('@prisma/client'); +const prisma = new PrismaClient(); + +async function fixGenres() { + console.log('🔧 Fixing Genre.name / Genre.subtitle ...'); + const genres = await prisma.genre.findMany(); + let updated = 0; + + for (const g of genres) { + let changed = false; + let newName = g.name; + let newSubtitle = g.subtitle; + + if (typeof g.name === 'string') { + newName = { de: g.name, en: g.name }; + changed = true; + } + + if (g.subtitle && typeof g.subtitle === 'string') { + newSubtitle = { de: g.subtitle, en: g.subtitle }; + changed = true; + } + + if (changed) { + await prisma.genre.update({ + where: { id: g.id }, + data: { + name: newName, + subtitle: newSubtitle, + }, + }); + updated++; + } + } + + console.log(`✅ Genres aktualisiert: ${updated} Einträge geändert.`); +} + +async function fixSpecials() { + console.log('🔧 Fixing Special.name / Special.subtitle ...'); + const specials = await prisma.special.findMany(); + let updated = 0; + + for (const s of specials) { + let changed = false; + let newName = s.name; + let newSubtitle = s.subtitle; + + if (typeof s.name === 'string') { + newName = { de: s.name, en: s.name }; + changed = true; + } + + if (s.subtitle && typeof s.subtitle === 'string') { + newSubtitle = { de: s.subtitle, en: s.subtitle }; + changed = true; + } + + if (changed) { + await prisma.special.update({ + where: { id: s.id }, + data: { + name: newName, + subtitle: newSubtitle, + }, + }); + updated++; + } + } + + console.log(`✅ Specials aktualisiert: ${updated} Einträge geändert.`); +} + +async function fixNews() { + console.log('🔧 Fixing News.title / News.content ...'); + const news = await prisma.news.findMany(); + let updated = 0; + + for (const n of news) { + let changed = false; + let newTitle = n.title; + let newContent = n.content; + + if (typeof n.title === 'string') { + newTitle = { de: n.title, en: n.title }; + changed = true; + } + + if (typeof n.content === 'string') { + newContent = { de: n.content, en: n.content }; + changed = true; + } + + if (changed) { + await prisma.news.update({ + where: { id: n.id }, + data: { + title: newTitle, + content: newContent, + }, + }); + updated++; + } + } + + console.log(`✅ News aktualisiert: ${updated} Einträge geändert.`); +} + +async function main() { + console.log('🚀 Starte Fix für i18n-Daten (JSON-Felder) ...'); + + try { + await fixGenres(); + await fixSpecials(); + await fixNews(); + } catch (err) { + console.error('❌ Fehler beim Fixen der i18n-Daten:', err); + process.exitCode = 1; + } finally { + await prisma.$disconnect(); + } + + console.log('🎉 Fix für i18n-Daten abgeschlossen.'); +} + +main(); + +