From 3020ae2ad0659edb3b645f7d42656e4c6de81a20 Mon Sep 17 00:00:00 2001 From: Johannes Baumeister Date: Wed, 24 Jun 2026 15:44:23 +0200 Subject: [PATCH] chore: migration to Standortplaner repository and local modifications --- .gitea/workflows/deploy.yml | 42 ++++++++++----- app.js | 81 ++++++++++++++++++++--------- backend/add_variante_column.js | 15 +++--- backend/alter_column_type.js | 15 +++--- backend/check_assignments.js | 11 ++-- backend/check_bwscheddebrock_wea.js | 15 +++--- backend/check_columns_full.js | 15 +++--- backend/check_db_content.js | 15 +++--- backend/check_default.js | 15 +++--- backend/check_entries.js | 15 +++--- backend/check_geodata_db.js | 15 +++--- backend/check_id_default.js | 15 +++--- backend/check_new_alkis.js | 15 +++--- backend/check_old_alkis.js | 15 +++--- backend/check_project_status.js | 11 ++-- backend/check_projects.js | 15 +++--- backend/check_sample_data.js | 15 +++--- backend/check_srid.js | 15 +++--- backend/check_status_columns.js | 15 +++--- backend/check_wea.js | 15 +++--- backend/cleanup_db.js | 15 +++--- backend/fix_db.js | 15 +++--- backend/fix_view.js | 15 +++--- backend/inspect_alkis.js | 11 ++-- backend/inspect_db.js | 3 +- backend/inspect_geodaten_schema.js | 15 +++--- backend/inspect_projekte.js | 15 +++--- backend/inspect_view.js | 15 +++--- backend/list_all_tables.js | 15 +++--- backend/list_columns_alkis.js | 15 +++--- backend/list_geodata_tables.js | 15 +++--- backend/list_public_tables.js | 15 +++--- backend/list_tables_standort.js | 15 +++--- backend/list_tables_trassen.js | 15 +++--- backend/search_wea_matviews.js | 15 +++--- backend/search_wea_pg_tables.js | 15 +++--- backend/search_wea_tables.js | 15 +++--- backend/test_art.js | 40 ++++++++++++++ backend/test_db_insert.js | 15 +++--- backend/test_db_logic.js | 15 +++--- backend/test_insert.js | 15 +++--- backend/test_insert_status.js | 15 +++--- backend/test_ltg.js | 47 +++++++++++++++++ backend/test_null_query.js | 15 +++--- backend/test_project_id.js | 15 +++--- backend/test_resolution.js | 9 +++- backend/update_rotation.js | 15 +++--- docker-compose.yml | 29 +++++------ 48 files changed, 520 insertions(+), 334 deletions(-) create mode 100644 backend/test_art.js create mode 100644 backend/test_ltg.js diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 83b866e..b37a05b 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: Deploy Bürgerwind +name: Deploy Standortplaner on: push: @@ -12,15 +12,33 @@ jobs: - name: Code holen uses: actions/checkout@v4 - - name: .env erstellen - run: | - echo "DB_HOST=${{ secrets.DB_HOST }}" > .env - echo "DB_PORT=5432" >> .env - echo "DB_USER=${{ secrets.DB_USER }}" >> .env - echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env - echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env - echo "DB_SCHEMA=geodaten" >> .env + - name: Dateien auf Server kopieren + uses: appleboy/scp-action@master + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SERVER_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + source: "." + target: "/opt/automation-stack/standortplaner" - - name: App bauen und starten - run: | - docker compose up -d --build --force-recreate \ No newline at end of file + - name: Deployment auf Server ausführen + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SERVER_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + cd /opt/automation-stack/standortplaner + + # .env Datei mit den Secrets befüllen + echo "DB_HOST=${{ secrets.DB_HOST }}" > .env + echo "DB_PORT=${{ secrets.DB_PORT }}" >> .env + echo "DB_USER=${{ secrets.DB_USER }}" >> .env + echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env + echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env + echo "DB_SCHEMA=geodaten" >> .env + echo "OIDC_CLIENT_ID=${{ secrets.OIDC_CLIENT_ID }}" >> .env + echo "OIDC_CLIENT_SECRET=${{ secrets.OIDC_CLIENT_SECRET }}" >> .env + + # App starten + docker compose up -d --build --force-recreate \ No newline at end of file diff --git a/app.js b/app.js index 23a2294..1f279e5 100644 --- a/app.js +++ b/app.js @@ -12,7 +12,9 @@ document.addEventListener('DOMContentLoaded', async () => { ownerMapping: { firstName: 'vorname', lastName: 'nachname' }, // Default for ALKIS and modern Shapefiles ownerStatuses: {}, // { "name vorname": { status: "...", notiz: "..." } } showAuxiliary: true, - isEditMode: false + isEditMode: false, + isLoading: true, + hasLoadedFromDB: false }; const STATUS_MAP = { @@ -1942,29 +1944,36 @@ document.addEventListener('DOMContentLoaded', async () => { // Initialize Dynamic Layers and then load data initDynamicLayers().then(async () => { - // Erst Status laden - await loadOwnerStatusesFromDB(); + try { + // Erst Status laden + await loadOwnerStatusesFromDB(); - // Dann WEAs laden - await loadTurbinesFromDB(); + // Dann WEAs laden + await loadTurbinesFromDB(); - // Automatisches Mapping für den Eigentümer-Layer prüfen - const ownerLayerName = Object.keys(overlays).find(k => k.toLowerCase().includes('eigentümer')); - if (ownerLayerName && overlays[ownerLayerName]) { - const layer = overlays[ownerLayerName]; - const layers = layer.getLayers(); - if (layers.length > 0) { - const firstFeature = layers[0].feature; - if (firstFeature?.properties) { - const props = firstFeature.properties; - const vna = Object.keys(props).find(k => k.toUpperCase() === 'VNA'); - const gna = Object.keys(props).find(k => k.toUpperCase() === 'GNA' || k.toUpperCase() === 'NBA'); - if (vna && gna) { - state.ownerMapping = { firstName: vna, lastName: gna }; - refreshOwnerLayerStyle(); + // Automatisches Mapping für den Eigentümer-Layer prüfen + const ownerLayerName = Object.keys(overlays).find(k => k.toLowerCase().includes('eigentümer')); + if (ownerLayerName && overlays[ownerLayerName]) { + const layer = overlays[ownerLayerName]; + const layers = layer.getLayers(); + if (layers.length > 0) { + const firstFeature = layers[0].feature; + if (firstFeature?.properties) { + const props = firstFeature.properties; + const vna = Object.keys(props).find(k => k.toUpperCase() === 'VNA'); + const gna = Object.keys(props).find(k => k.toUpperCase() === 'GNA' || k.toUpperCase() === 'NBA'); + if (vna && gna) { + state.ownerMapping = { firstName: vna, lastName: gna }; + refreshOwnerLayerStyle(); + } } } } + } catch (e) { + console.error("Fehler bei der Initialisierung des Planungstools:", e); + } finally { + state.isLoading = false; + console.log("Planungstool initialisiert, isLoading = false"); } }); @@ -2004,15 +2013,37 @@ document.addEventListener('DOMContentLoaded', async () => { // DB Persistence let autoSaveTimeout = null; function triggerAutoSave() { + if (state.isLoading) { + console.log("Auto-Save unterdrückt: App befindet sich noch in der Ladephase."); + return; + } + if (!state.hasLoadedFromDB) { + console.warn("Auto-Save unterdrückt: Datenbank wurde beim Start nicht erfolgreich geladen."); + return; + } if (autoSaveTimeout) clearTimeout(autoSaveTimeout); autoSaveTimeout = setTimeout(() => { - saveTurbinesToDB(); + saveTurbinesToDB(false); }, 1500); // 1.5 Seconds debounce } - async function saveTurbinesToDB() { + async function saveTurbinesToDB(force = false) { + if (state.isLoading && !force) { + console.log("Speichern unterdrückt: Ladephase aktiv."); + return; + } + if (!state.hasLoadedFromDB && !force) { + console.warn("Speichern unterdrückt: Datenbank wurde beim Start nicht geladen."); + return; + } + + if (!state.hasLoadedFromDB && force) { + const confirmSave = confirm("WARNUNG: Die Datenbank wurde beim Start nicht erfolgreich geladen. Wenn Sie jetzt speichern, überschreiben Sie eventuell vorhandene Standorte in der Datenbank. Möchten Sie trotzdem speichern?"); + if (!confirmSave) return; + } + const statusEl = document.getElementById('statusInfo'); - if (statusEl) statusEl.innerText = "Automatische Speicherung..."; + if (statusEl) statusEl.innerText = "Speicherung läuft..."; const projekt_id = "BWSamern-Ohne"; const turbineData = state.turbines.map(t => ({ @@ -2041,13 +2072,13 @@ document.addEventListener('DOMContentLoaded', async () => { } } catch (err) { console.error(err); - if (statusEl) statusEl.innerHTML = `Auto-Save Fehler: ${err.message}`; + if (statusEl) statusEl.innerHTML = `Speicherfehler: ${err.message}`; } } const btnSaveDB = document.getElementById('btnSaveDB'); if (btnSaveDB) { - btnSaveDB.addEventListener('click', saveTurbinesToDB); + btnSaveDB.addEventListener('click', () => saveTurbinesToDB(true)); } async function loadTurbinesFromDB() { @@ -2102,9 +2133,11 @@ document.addEventListener('DOMContentLoaded', async () => { } else { console.log("Datenbank ist leer."); } + state.hasLoadedFromDB = true; } catch (err) { console.error("GLOBALER FEHLER beim Laden aus der DB:", err); if (statusEl) statusEl.innerText = "Fehler beim Laden der Standorte."; + state.hasLoadedFromDB = false; } } diff --git a/backend/add_variante_column.js b/backend/add_variante_column.js index 4f017e5..fe88c4a 100644 --- a/backend/add_variante_column.js +++ b/backend/add_variante_column.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/alter_column_type.js b/backend/alter_column_type.js index 66d2c0a..abe1821 100644 --- a/backend/alter_column_type.js +++ b/backend/alter_column_type.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_assignments.js b/backend/check_assignments.js index df1ed7d..e178822 100644 --- a/backend/check_assignments.js +++ b/backend/check_assignments.js @@ -1,10 +1,11 @@ const { Client } = require('pg'); +require('dotenv').config({ path: '../.env' }); const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME }); client.connect().then(async () => { try { diff --git a/backend/check_bwscheddebrock_wea.js b/backend/check_bwscheddebrock_wea.js index 65aab67..3d78347 100644 --- a/backend/check_bwscheddebrock_wea.js +++ b/backend/check_bwscheddebrock_wea.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_columns_full.js b/backend/check_columns_full.js index 1d2dec0..ecb9d07 100644 --- a/backend/check_columns_full.js +++ b/backend/check_columns_full.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_db_content.js b/backend/check_db_content.js index 401d3b8..ec36228 100644 --- a/backend/check_db_content.js +++ b/backend/check_db_content.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_default.js b/backend/check_default.js index 8e793e0..74b6eda 100644 --- a/backend/check_default.js +++ b/backend/check_default.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_entries.js b/backend/check_entries.js index 3e2456e..dfc37aa 100644 --- a/backend/check_entries.js +++ b/backend/check_entries.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_geodata_db.js b/backend/check_geodata_db.js index 6188bc6..751abcb 100644 --- a/backend/check_geodata_db.js +++ b/backend/check_geodata_db.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'geodata' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_id_default.js b/backend/check_id_default.js index ce2e94b..662c58d 100644 --- a/backend/check_id_default.js +++ b/backend/check_id_default.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_new_alkis.js b/backend/check_new_alkis.js index 5223ec5..7e4973c 100644 --- a/backend/check_new_alkis.js +++ b/backend/check_new_alkis.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_old_alkis.js b/backend/check_old_alkis.js index 449ccea..6cc47bd 100644 --- a/backend/check_old_alkis.js +++ b/backend/check_old_alkis.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_project_status.js b/backend/check_project_status.js index 8995ed4..fc9511f 100644 --- a/backend/check_project_status.js +++ b/backend/check_project_status.js @@ -1,10 +1,11 @@ const { Client } = require('pg'); +require('dotenv').config({ path: '../.env' }); const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME }); client.connect().then(async () => { try { diff --git a/backend/check_projects.js b/backend/check_projects.js index 1fa7955..ef43693 100644 --- a/backend/check_projects.js +++ b/backend/check_projects.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_sample_data.js b/backend/check_sample_data.js index 6f56a5b..efa31e6 100644 --- a/backend/check_sample_data.js +++ b/backend/check_sample_data.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_srid.js b/backend/check_srid.js index e72438e..2b8e185 100644 --- a/backend/check_srid.js +++ b/backend/check_srid.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_status_columns.js b/backend/check_status_columns.js index 027af9a..c2cb1a0 100644 --- a/backend/check_status_columns.js +++ b/backend/check_status_columns.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/check_wea.js b/backend/check_wea.js index 10c8719..50f7b9d 100644 --- a/backend/check_wea.js +++ b/backend/check_wea.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/cleanup_db.js b/backend/cleanup_db.js index a1a88dd..9623ed9 100644 --- a/backend/cleanup_db.js +++ b/backend/cleanup_db.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function clean() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/fix_db.js b/backend/fix_db.js index 0a87438..ba2aad9 100644 --- a/backend/fix_db.js +++ b/backend/fix_db.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function fix() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/fix_view.js b/backend/fix_view.js index 099a2dc..08305f6 100644 --- a/backend/fix_view.js +++ b/backend/fix_view.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function fixView() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/inspect_alkis.js b/backend/inspect_alkis.js index 9440d66..8d08513 100644 --- a/backend/inspect_alkis.js +++ b/backend/inspect_alkis.js @@ -1,10 +1,11 @@ const { Client } = require('pg'); +require('dotenv').config({ path: '../.env' }); const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME }); client.connect().then(async () => { try { diff --git a/backend/inspect_db.js b/backend/inspect_db.js index f7099dd..a0fa1bd 100644 --- a/backend/inspect_db.js +++ b/backend/inspect_db.js @@ -1,3 +1,4 @@ +require('dotenv').config({ path: require('path').resolve(__dirname, '../.env') }); const { Client } = require('pg'); const client = new Client({ @@ -5,7 +6,7 @@ const client = new Client({ port: 5432, database: 'enwelo', user: 'postgres', - password: '' + password: process.env.DB_PASSWORD }); async function run() { diff --git a/backend/inspect_geodaten_schema.js b/backend/inspect_geodaten_schema.js index cd28d28..8e1c1b5 100644 --- a/backend/inspect_geodaten_schema.js +++ b/backend/inspect_geodaten_schema.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function inspect() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/inspect_projekte.js b/backend/inspect_projekte.js index ef2a55c..6ff592c 100644 --- a/backend/inspect_projekte.js +++ b/backend/inspect_projekte.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function inspect() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/inspect_view.js b/backend/inspect_view.js index 74bf1e9..2f79f57 100644 --- a/backend/inspect_view.js +++ b/backend/inspect_view.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/list_all_tables.js b/backend/list_all_tables.js index 259b117..d26daea 100644 --- a/backend/list_all_tables.js +++ b/backend/list_all_tables.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/list_columns_alkis.js b/backend/list_columns_alkis.js index 9313045..e4aca3b 100644 --- a/backend/list_columns_alkis.js +++ b/backend/list_columns_alkis.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/list_geodata_tables.js b/backend/list_geodata_tables.js index 17a65ad..288b4a7 100644 --- a/backend/list_geodata_tables.js +++ b/backend/list_geodata_tables.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'geodata' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/list_public_tables.js b/backend/list_public_tables.js index aaae834..f35c87a 100644 --- a/backend/list_public_tables.js +++ b/backend/list_public_tables.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/list_tables_standort.js b/backend/list_tables_standort.js index b581f1d..a737c51 100644 --- a/backend/list_tables_standort.js +++ b/backend/list_tables_standort.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/list_tables_trassen.js b/backend/list_tables_trassen.js index 5a4160a..f6f656e 100644 --- a/backend/list_tables_trassen.js +++ b/backend/list_tables_trassen.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/search_wea_matviews.js b/backend/search_wea_matviews.js index f54c551..acfba95 100644 --- a/backend/search_wea_matviews.js +++ b/backend/search_wea_matviews.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/search_wea_pg_tables.js b/backend/search_wea_pg_tables.js index 916930c..d575de4 100644 --- a/backend/search_wea_pg_tables.js +++ b/backend/search_wea_pg_tables.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/search_wea_tables.js b/backend/search_wea_tables.js index 6565ff2..ce37eac 100644 --- a/backend/search_wea_tables.js +++ b/backend/search_wea_tables.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/test_art.js b/backend/test_art.js new file mode 100644 index 0000000..6a31457 --- /dev/null +++ b/backend/test_art.js @@ -0,0 +1,40 @@ +require('dotenv').config({ path: '../.env' }); +const { Pool } = require('pg'); + +const pool = new Pool({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + database: process.env.DB_NAME, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD +}); + +async function run() { + try { + const res = await pool.query("SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'geodaten' AND table_name = 'artennachweis'"); + console.log("Columns:", res.rows); + + // Test the exact query + const res2 = await pool.query(`SELECT jsonb_build_object( + 'type', 'FeatureCollection', + 'features', COALESCE(jsonb_agg(features.feature), '[]'::jsonb) + ) + FROM ( + SELECT jsonb_build_object( + 'type', 'Feature', + 'geometry', ST_AsGeoJSON(ST_Transform(geom, 4326))::jsonb, + 'properties', jsonb_build_object( + 'art', art + ) + ) AS feature + FROM geodaten.artennachweis + ) features`); + console.log("Query Success! First few chars of result:", JSON.stringify(res2.rows[0]).substring(0, 100)); + } catch (err) { + console.error("Error:", err.message); + } finally { + pool.end(); + } +} + +run(); diff --git a/backend/test_db_insert.js b/backend/test_db_insert.js index 52565e2..fa9bb13 100644 --- a/backend/test_db_insert.js +++ b/backend/test_db_insert.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function test_insert() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/test_db_logic.js b/backend/test_db_logic.js index 412a05e..0d86e3c 100644 --- a/backend/test_db_logic.js +++ b/backend/test_db_logic.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function testFullLogic() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/test_insert.js b/backend/test_insert.js index 0ac4d3d..2b3e0c6 100644 --- a/backend/test_insert.js +++ b/backend/test_insert.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/test_insert_status.js b/backend/test_insert_status.js index 16fdae9..01f671e 100644 --- a/backend/test_insert_status.js +++ b/backend/test_insert_status.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function testInsert() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/test_ltg.js b/backend/test_ltg.js new file mode 100644 index 0000000..ae19cf8 --- /dev/null +++ b/backend/test_ltg.js @@ -0,0 +1,47 @@ +require('dotenv').config({ path: '../.env' }); +const { Pool } = require('pg'); + +const pool = new Pool({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + database: process.env.DB_NAME, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD +}); + +async function run() { + try { + const result = await pool.query( + `SELECT jsonb_build_object( + 'type', 'FeatureCollection', + 'features', COALESCE(jsonb_agg(features.feature), '[]'::jsonb) + ) + FROM ( + SELECT jsonb_build_object( + 'type', 'Feature', + 'geometry', ST_AsGeoJSON(ST_Transform(geom, 4326))::jsonb, + 'properties', jsonb_build_object( + 'art', art, + 'spannung', spannung, + 'ltg_name', ltg_name, + 'bezeichnun', bezeichnun, + 'bemerkung', bemerkung, + 'status', status, + 'quelle', quelle, + 'info', info, + 'vorschlag', vorschlag + ) + ) AS feature + FROM geodaten.leitungsverlaeufe + WHERE art ILIKE '%wasserstoff%' OR art ILIKE '%freileitung%' + ) features` + ); + console.log("Success! Output:", JSON.stringify(result.rows[0]).substring(0, 100)); + } catch (err) { + console.error("DB Error:", err.message); + } finally { + pool.end(); + } +} + +run(); diff --git a/backend/test_null_query.js b/backend/test_null_query.js index 1548c0a..947f464 100644 --- a/backend/test_null_query.js +++ b/backend/test_null_query.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function testQuery() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/test_project_id.js b/backend/test_project_id.js index 09f219a..5d95c34 100644 --- a/backend/test_project_id.js +++ b/backend/test_project_id.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function testProject() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/backend/test_resolution.js b/backend/test_resolution.js index f8a5027..26c839d 100644 --- a/backend/test_resolution.js +++ b/backend/test_resolution.js @@ -1,5 +1,12 @@ const { Client } = require('pg'); -const client = new Client({ host: '87.106.21.21', port: 5432, user: 'enwelo_admin', password: 'WX1t1cgP1qK09', database: 'enwelo' }); +require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); async function resolveProjectId(client, input) { if (!input) return null; diff --git a/backend/update_rotation.js b/backend/update_rotation.js index b6f34f3..270a3ee 100644 --- a/backend/update_rotation.js +++ b/backend/update_rotation.js @@ -1,13 +1,14 @@ const { Client } = require('pg'); async function check() { - const client = new Client({ - host: '87.106.21.21', - port: 5432, - user: 'enwelo_admin', - password: 'WX1t1cgP1qK09', - database: 'enwelo' - }); + require('dotenv').config({ path: '../.env' }); +const client = new Client({ + host: process.env.DB_HOST, + port: process.env.DB_PORT, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_NAME +}); try { await client.connect(); diff --git a/docker-compose.yml b/docker-compose.yml index 48266fa..90dcc12 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,25 +1,24 @@ services: - bw-samern-ohne: + standortplaner: + # Baut das Image basierend auf deinem Dockerfile build: . - container_name: bw-samern-ohne + container_name: standortplaner restart: always + # Lädt die Umgebungsvariablen (die durch deine deploy.yaml erstellt werden) + env_file: + - .env networks: - proxy labels: - # 1. Aktivierung in Traefik - "traefik.enable=true" - - # 2. Router-Konfiguration (Domain & HTTPS) - - "traefik.http.routers.bw-samern-ohne.rule=Host(`bw-samern-ohne.enwelo-serverumgebung.cloud`)" - - "traefik.http.routers.bw-samern-ohne.entrypoints=websecure" - - "traefik.http.routers.bw-samern-ohne.tls.certresolver=le" - - # 3. Zuweisung des internen Service-Ports - - "traefik.http.services.bw-samern-ohne.loadbalancer.server.port=3000" - - # 4. Authentik-Schutz (Middleware) - # Wir nutzen jetzt den Namen aus unserer neuen Server-Datei: - - "traefik.http.routers.bw-samern-ohne.middlewares=authentik@file" + # URL-Routing + - "traefik.http.routers.standortplaner.rule=Host(`standortplaner.enwelo-serverumgebung.cloud`)" + - "traefik.http.routers.standortplaner.entrypoints=websecure" + - "traefik.http.routers.standortplaner.tls.certresolver=le" + # Authentik-Schutz + - "traefik.http.routers.standortplaner.middlewares=authentik@file" + # Port-Mapping + - "traefik.http.services.standortplaner.loadbalancer.server.port=3000" networks: proxy: