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.
This commit is contained in:
140
scripts/fix-i18n-data.js
Normal file
140
scripts/fix-i18n-data.js
Normal file
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user