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: