#!/bin/bash # Fix für i18n-Daten: Kopiert DB lokal, fixt sie, kopiert zurück set -e echo "🔧 Fixe i18n-Daten (lokal kopieren, fixen, zurück kopieren)..." echo "" # Prüfe ob Container läuft if ! docker ps | grep -q hoerdle; then echo "❌ Container 'hoerdle' läuft nicht!" exit 1 fi # Backup erstellen BACKUP_FILE="./data/prod.db.backup.$(date +%Y%m%d_%H%M%S)" echo "💾 Erstelle Backup..." docker cp hoerdle:/app/data/prod.db "$BACKUP_FILE" # Setze Berechtigungen (kann root gehören) sudo chmod 666 "$BACKUP_FILE" 2>/dev/null || chmod 666 "$BACKUP_FILE" 2>/dev/null || true echo "✅ Backup erstellt: $BACKUP_FILE" echo "" # Kopiere DB lokal echo "📥 Kopiere Datenbank lokal..." docker cp hoerdle:/app/data/prod.db ./data/prod.db.tmp # Setze Berechtigungen (Datei kann root gehören) sudo chmod 666 ./data/prod.db.tmp 2>/dev/null || chmod 666 ./data/prod.db.tmp 2>/dev/null || { echo "⚠️ Konnte Berechtigungen nicht setzen. Versuche mit sudo..." sudo chmod 666 ./data/prod.db.tmp } chmod 775 ./data 2>/dev/null || sudo chmod 775 ./data 2>/dev/null || true echo "✅ Datenbank kopiert" echo "" # Prüfe ob sqlite3 verfügbar ist if ! command -v sqlite3 &> /dev/null; then echo "❌ sqlite3 ist nicht installiert!" echo " Installiere es mit: sudo apt-get install sqlite3" exit 1 fi # Fixe die Datenbank echo "🔧 Fixe i18n-Daten..." # Stelle sicher, dass wir Schreibrechte haben (auch für WAL-Dateien) chmod 666 ./data/prod.db.tmp 2>/dev/null || sudo chmod 666 ./data/prod.db.tmp chmod 775 ./data 2>/dev/null || sudo chmod 775 ./data # Prüfe ob wir die Datei lesen können if [ ! -r "./data/prod.db.tmp" ]; then echo "❌ Kann Datenbankdatei nicht lesen. Setze Besitzer..." sudo chown $(whoami):$(whoami) ./data/prod.db.tmp || true fi # Führe SQL-Befehle aus (mit sudo falls nötig) if [ -r "./data/prod.db.tmp" ] && [ -w "./data" ]; then sqlite3 ./data/prod.db.tmp << 'SQL' -- Fix Genre.name UPDATE Genre SET name = json_object('de', name, 'en', name) WHERE typeof(name) = 'text' AND name NOT LIKE '{%'; -- Fix Genre.subtitle UPDATE Genre SET subtitle = json_object('de', subtitle, 'en', subtitle) WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%'; -- Fix Special.name UPDATE Special SET name = json_object('de', name, 'en', name) WHERE typeof(name) = 'text' AND name NOT LIKE '{%'; -- Fix Special.subtitle UPDATE Special SET subtitle = json_object('de', subtitle, 'en', subtitle) WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%'; -- Fix News.title UPDATE News SET title = json_object('de', title, 'en', title) WHERE typeof(title) = 'text' AND title NOT LIKE '{%'; -- Fix News.content UPDATE News SET content = json_object('de', content, 'en', content) WHERE typeof(content) = 'text' AND content NOT LIKE '{%'; SELECT '✅ Alle i18n-Daten wurden gefixt!' as status; SQL else echo "❌ Kann Datenbankdatei nicht lesen oder schreiben!" echo " Versuche mit sudo..." sudo sqlite3 ./data/prod.db.tmp << 'SQL' -- Fix Genre.name UPDATE Genre SET name = json_object('de', name, 'en', name) WHERE typeof(name) = 'text' AND name NOT LIKE '{%'; -- Fix Genre.subtitle UPDATE Genre SET subtitle = json_object('de', subtitle, 'en', subtitle) WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%'; -- Fix Special.name UPDATE Special SET name = json_object('de', name, 'en', name) WHERE typeof(name) = 'text' AND name NOT LIKE '{%'; -- Fix Special.subtitle UPDATE Special SET subtitle = json_object('de', subtitle, 'en', subtitle) WHERE subtitle IS NOT NULL AND typeof(subtitle) = 'text' AND subtitle NOT LIKE '{%'; -- Fix News.title UPDATE News SET title = json_object('de', title, 'en', title) WHERE typeof(title) = 'text' AND title NOT LIKE '{%'; -- Fix News.content UPDATE News SET content = json_object('de', content, 'en', content) WHERE typeof(content) = 'text' AND content NOT LIKE '{%'; SELECT '✅ Alle i18n-Daten wurden gefixt!' as status; SQL fi if [ $? -ne 0 ]; then echo "❌ Fehler beim Fixen der Datenbank!" exit 1 fi echo "✅ Datenbank gefixt" echo "" # Kopiere zurück echo "📤 Kopiere gefixte Datenbank zurück..." docker cp ./data/prod.db.tmp hoerdle:/app/data/prod.db echo "✅ Datenbank zurück kopiert" echo "" # Aufräumen rm -f ./data/prod.db.tmp ./data/prod.db.tmp.backup echo "🔄 Starte Container neu..." docker compose restart hoerdle echo "" echo "✅ Fertig! Prüfe die Logs:" echo " docker logs hoerdle --tail=50"