Files
hoerdle/scripts/fix-i18n-data.js
Hördle Bot 8c9c4eb159 fix: enhance database permissions script with logging and user feedback
- 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.
2025-12-01 16:58:47 +01:00

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();