#!/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();