Files
yourpart3/backend/utils/syncDatabase.js
Torsten Schulz (local) 74a21fed14 feat(backend): Erweiterung der Datenbank-Schema-Erstellung im Deployment-Skript
- Hinzufügen von SQL-Abfragen zur Erstellung mehrerer Datenbankschemas während des Deployments.
- Anpassung der Logik, um nur Schemas zu erstellen, ohne Modelle zu synchronisieren.
- Verbesserung der Konsolenausgaben zur besseren Nachverfolgbarkeit der Schema-Initialisierung.
2025-08-29 11:14:46 +02:00

146 lines
5.6 KiB
JavaScript

// syncDatabase.js
import { initializeDatabase, syncModelsWithUpdates, syncModelsAlways } from './sequelize.js';
import initializeTypes from './initializeTypes.js';
import initializeSettings from './initializeSettings.js';
import initializeUserRights from './initializeUserRights.js';
import initializeImageTypes from './initializeImageTypes.js';
import initializeFalukant from './initializeFalukant.js';
import setupAssociations from '../models/associations.js';
import models from '../models/index.js';
import { createTriggers } from '../models/trigger.js';
import initializeForum from './initializeForum.js';
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
const currentStage = process.env.STAGE || 'nicht gesetzt';
console.log(`🚀 Starte Datenbank-Synchronisation (Stage: ${currentStage})`);
if (currentStage !== 'dev') {
console.log('⚠️ WARNUNG: Automatische Schema-Updates sind deaktiviert');
console.log('💡 Setze STAGE=dev in der .env Datei für automatische Schema-Updates');
console.log('🔒 Produktionsmodus: Nur normale Synchronisation ohne Schema-Änderungen');
} else {
console.log('✅ Entwicklungsmodus aktiv - Schema-Updates sind aktiviert');
}
console.log("Initializing database schemas...");
await initializeDatabase();
console.log("Synchronizing models...");
await syncModelsWithUpdates(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 complete.');
} catch (error) {
console.error('Unable to synchronize the database:', error);
}
};
// 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...");
// Nur Schemas erstellen, keine Model-Synchronisation
const { sequelize } = await import('./sequelize.js');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS community');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS logs');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS type');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS service');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS forum');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS falukant_data');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS falukant_type');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS falukant_predefine');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS falukant_log');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS chat');
await sequelize.query('CREATE SCHEMA IF NOT EXISTS match3');
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 };