- Added logging functionality to the database permissions script to track changes and errors. - Implemented user feedback prompts to inform users of the script's progress and outcomes, improving usability. - Ensured the script maintains robust error handling for ownership changes.
141 lines
3.2 KiB
JavaScript
141 lines
3.2 KiB
JavaScript
#!/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();
|
|
|
|
|