From 12fd71c6ccec1f4169917615e0ba63bdc9249f39 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Fri, 29 Aug 2025 11:08:37 +0200 Subject: [PATCH] feat(backend): Verbesserung der Datenbank-Synchronisation und Deployment-Logik MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Einführung eines optionalen Parameters STAGE im Deployment-Skript zur flexiblen Handhabung von Umgebungen. - Anpassung der Datenbank-Synchronisation, um immer Schema-Updates im Deployment-Modus durchzuführen. - Umbenennung der Synchronisationsfunktion für Klarheit und bessere Lesbarkeit. - Erweiterung der Konsolenausgaben zur besseren Nachverfolgbarkeit während des Deployments. --- backend/sync-database.js | 10 +++--- backend/utils/sequelize.js | 17 +++++++++- backend/utils/syncDatabase.js | 60 +++++++++++++++++++++++++++++++++-- deploy-backend.sh | 10 ++++-- 4 files changed, 86 insertions(+), 11 deletions(-) diff --git a/backend/sync-database.js b/backend/sync-database.js index 9be35b9..47e1cf5 100644 --- a/backend/sync-database.js +++ b/backend/sync-database.js @@ -6,16 +6,16 @@ */ import './config/loadEnv.js'; -import { syncDatabase } from './utils/syncDatabase.js'; +import { syncDatabaseForDeployment } from './utils/syncDatabase.js'; import cleanupDatabaseConstraints from './utils/cleanupDatabaseConstraints.js'; -console.log('🗄️ Starte Datenbank-Synchronisation...'); +console.log('🗄️ Starte Datenbank-Synchronisation (Deployment-Modus)...'); async function main() { try { - // 1. Datenbank-Synchronisation - console.log('📊 Führe Datenbank-Synchronisation durch...'); - await syncDatabase(); + // 1. Datenbank-Synchronisation mit Schema-Updates + console.log('📊 Führe Datenbank-Synchronisation mit Schema-Updates durch...'); + await syncDatabaseForDeployment(); console.log('✅ Datenbank-Synchronisation erfolgreich abgeschlossen'); // 2. Constraint-Bereinigung diff --git a/backend/utils/sequelize.js b/backend/utils/sequelize.js index 4cef7a5..29ab74e 100644 --- a/backend/utils/sequelize.js +++ b/backend/utils/sequelize.js @@ -384,4 +384,19 @@ async function updateFalukantUserMoney(falukantUserId, moneyChange, activity, ch } } -export { sequelize, initializeDatabase, syncModels, syncModelsWithUpdates, updateSchema, updateFalukantUserMoney }; +// Immer Schema-Updates (für Deployment) +const syncModelsAlways = async (models) => { + console.log('🔍 Deployment-Modus: Führe immer Schema-Updates durch...'); + + try { + for (const model of Object.values(models)) { + await model.sync({ alter: true, force: false }); + } + console.log('✅ Schema-Updates für alle Models abgeschlossen'); + } catch (error) { + console.error('❌ Fehler bei Schema-Updates:', error); + throw error; + } +}; + +export { sequelize, initializeDatabase, syncModels, syncModelsWithUpdates, syncModelsAlways, updateSchema, updateFalukantUserMoney }; diff --git a/backend/utils/syncDatabase.js b/backend/utils/syncDatabase.js index 9c81072..7659099 100644 --- a/backend/utils/syncDatabase.js +++ b/backend/utils/syncDatabase.js @@ -1,6 +1,6 @@ // syncDatabase.js -import { initializeDatabase, syncModelsWithUpdates } from './sequelize.js'; +import { initializeDatabase, syncModelsWithUpdates, syncModelsAlways } from './sequelize.js'; import initializeTypes from './initializeTypes.js'; import initializeSettings from './initializeSettings.js'; import initializeUserRights from './initializeUserRights.js'; @@ -14,6 +14,7 @@ import initializeChat from './initializeChat.js'; import initializeMatch3Data from './initializeMatch3.js'; import updateExistingMatch3Levels from './updateExistingMatch3Levels.js'; +// Normale Synchronisation (nur bei STAGE=dev Schema-Updates) const syncDatabase = async () => { try { // Zeige den aktuellen Stage an @@ -74,4 +75,59 @@ const syncDatabase = async () => { } }; -export { syncDatabase }; +// Deployment-Synchronisation (immer Schema-Updates) +const syncDatabaseForDeployment = async () => { + try { + // Zeige den aktuellen Stage an + const currentStage = process.env.STAGE || 'nicht gesetzt'; + console.log(`🚀 Starte Datenbank-Synchronisation für Deployment (Stage: ${currentStage})`); + console.log('✅ Deployment-Modus: Schema-Updates sind immer aktiviert'); + + console.log("Initializing database schemas..."); + await initializeDatabase(); + + console.log("Synchronizing models with schema updates..."); + await syncModelsAlways(models); + + console.log("Setting up associations..."); + setupAssociations(); + + console.log("Initializing settings..."); + await initializeSettings(); + + console.log("Initializing types..."); + await initializeTypes(); + + console.log("Initializing user rights..."); + await initializeUserRights(); + + console.log("Initializing image types..."); + await initializeImageTypes(); + + console.log("Initializing forums..."); + await initializeForum(); + + console.log("Initializing Falukant..."); + await initializeFalukant(); + + console.log("Creating triggers..."); + await createTriggers(); + + console.log("Initializing chat..."); + await initializeChat(); + + // Match3-Initialisierung NACH der Model-Synchronisation + console.log("Updating existing Match3 levels..."); + await updateExistingMatch3Levels(); + + console.log("Initializing Match3..."); + await initializeMatch3Data(); + + console.log('Database synchronization for deployment complete.'); + } catch (error) { + console.error('Unable to synchronize the database for deployment:', error); + throw error; // Fehler weiterwerfen + } +}; + +export { syncDatabase, syncDatabaseForDeployment }; diff --git a/deploy-backend.sh b/deploy-backend.sh index 6623b24..ea073b6 100644 --- a/deploy-backend.sh +++ b/deploy-backend.sh @@ -1,6 +1,10 @@ #!/bin/bash +# Optionaler Parameter für STAGE (Standard: production) +STAGE=${1:-production} + echo "Deploying YourPart Backend..." +echo "Using STAGE: $STAGE" # Zum Backend-Verzeichnis wechseln cd backend @@ -31,8 +35,8 @@ fi echo "Running database synchronization..." cd /opt/yourpart/backend -# STAGE auf dev setzen für Schema-Updates -echo "Setting STAGE=dev for schema updates..." -sudo -u www-data bash -c 'export STAGE=dev && npm run sync-db' +# STAGE für Schema-Updates verwenden +echo "Running database sync with STAGE=$STAGE..." +sudo -u www-data bash -c "export STAGE=$STAGE && npm run sync-db" echo "Backend deployment completed!"