From 63f9443b77ea89d026718aff2ec9bc3a4de5e557 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 18 Dec 2025 15:11:50 +0100 Subject: [PATCH] Implement cleanup of orphaned user_param_visibility entries before schema updates in syncDatabase functions --- ...cleanup_orphaned_user_param_visibility.sql | 23 +++++++++++ backend/utils/syncDatabase.js | 40 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 backend/sql/cleanup_orphaned_user_param_visibility.sql diff --git a/backend/sql/cleanup_orphaned_user_param_visibility.sql b/backend/sql/cleanup_orphaned_user_param_visibility.sql new file mode 100644 index 0000000..c7a399c --- /dev/null +++ b/backend/sql/cleanup_orphaned_user_param_visibility.sql @@ -0,0 +1,23 @@ +-- Cleanup script: Entfernt verwaiste Einträge aus user_param_visibility +-- Diese Einträge verweisen auf nicht existierende user_param Einträge +-- und verhindern das Hinzufügen des Foreign Key Constraints + +BEGIN; + +-- Lösche alle user_param_visibility Einträge, deren param_id nicht mehr in user_param existiert +DELETE FROM community.user_param_visibility +WHERE param_id NOT IN ( + SELECT id FROM community.user_param +); + +-- Zeige an, wie viele Einträge gelöscht wurden +DO $$ +DECLARE + deleted_count INTEGER; +BEGIN + GET DIAGNOSTICS deleted_count = ROW_COUNT; + RAISE NOTICE 'Gelöschte verwaiste Einträge: %', deleted_count; +END $$; + +COMMIT; + diff --git a/backend/utils/syncDatabase.js b/backend/utils/syncDatabase.js index 8aa4806..1e7e63e 100644 --- a/backend/utils/syncDatabase.js +++ b/backend/utils/syncDatabase.js @@ -54,6 +54,27 @@ const syncDatabase = async () => { console.warn('⚠️ Konnte traffic_light-Spalte nicht vorab sicherstellen:', e?.message || e); } + // Cleanup: Entferne verwaiste user_param_visibility Einträge vor Schema-Updates (nur wenn Schema-Updates aktiviert) + if (currentStage === 'dev') { + console.log("Cleaning up orphaned user_param_visibility entries..."); + try { + const result = await sequelize.query(` + DELETE FROM community.user_param_visibility + WHERE param_id NOT IN ( + SELECT id FROM community.user_param + ); + `); + const deletedCount = result[1] || 0; + if (deletedCount > 0) { + console.log(`✅ ${deletedCount} verwaiste user_param_visibility Einträge entfernt`); + } else { + console.log("✅ Keine verwaisten Einträge gefunden"); + } + } catch (e) { + console.warn('⚠️ Konnte verwaiste user_param_visibility Einträge nicht bereinigen:', e?.message || e); + } + } + console.log("Setting up associations..."); setupAssociations(); @@ -172,6 +193,25 @@ const syncDatabaseForDeployment = async () => { console.warn('⚠️ Konnte Transport-Spalten nicht nullable machen:', e?.message || e); } + // Cleanup: Entferne verwaiste user_param_visibility Einträge vor Schema-Updates + console.log("Cleaning up orphaned user_param_visibility entries..."); + try { + const result = await sequelize.query(` + DELETE FROM community.user_param_visibility + WHERE param_id NOT IN ( + SELECT id FROM community.user_param + ); + `); + const deletedCount = result[1] || 0; + if (deletedCount > 0) { + console.log(`✅ ${deletedCount} verwaiste user_param_visibility Einträge entfernt`); + } else { + console.log("✅ Keine verwaisten Einträge gefunden"); + } + } catch (e) { + console.warn('⚠️ Konnte verwaiste user_param_visibility Einträge nicht bereinigen:', e?.message || e); + } + console.log("Setting up associations..."); setupAssociations();