feat(backend): Verbesserung der Datenbank-Synchronisation und Deployment-Logik

- 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.
This commit is contained in:
Torsten Schulz (local)
2025-08-29 11:08:37 +02:00
parent d9bd4d970c
commit 12fd71c6cc
4 changed files with 86 additions and 11 deletions

View File

@@ -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 };

View File

@@ -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 };