diff --git a/app.js b/app.js index 30b155d..018f554 100644 --- a/app.js +++ b/app.js @@ -1465,7 +1465,7 @@ document.addEventListener('DOMContentLoaded', async () => { // Leitungsverläufe aus DB laden console.log("Lade Leitungsverläufe aus Datenbank..."); - const ltgResp = await fetch('/api/layers/leitungsverlaeufe').catch(err => { + const ltgResp = await fetch(`/api/layers/leitungsverlaeufe?project=${encodeURIComponent(projId)}`).catch(err => { console.error("Netzwerkfehler beim Laden der Leitungsverläufe:", err); return null; }); diff --git a/db_patch_leitungen.js b/db_patch_leitungen.js new file mode 100644 index 0000000..f28820a --- /dev/null +++ b/db_patch_leitungen.js @@ -0,0 +1,34 @@ +require('dotenv').config({ override: true }); +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() { + const bwId = '5bb4e049-85f2-4433-b38e-6a66b81e9f06'; + + try { + console.log('Adding projekt_id to leitungsverleaufe and Freileitungen...'); + + await pool.query('ALTER TABLE geodaten.leitungsverleaufe ADD COLUMN IF NOT EXISTS projekt_id character varying;'); + await pool.query('ALTER TABLE geodaten."Freileitungen" ADD COLUMN IF NOT EXISTS projekt_id character varying;'); + + const res1 = await pool.query('UPDATE geodaten.leitungsverleaufe SET projekt_id = $1 WHERE projekt_id IS NULL;', [bwId]); + console.log(`Updated ${res1.rowCount} rows in leitungsverleaufe.`); + + const res2 = await pool.query('UPDATE geodaten."Freileitungen" SET projekt_id = $1 WHERE projekt_id IS NULL;', [bwId]); + console.log(`Updated ${res2.rowCount} rows in Freileitungen.`); + + } catch (err) { + console.error('Error:', err); + } finally { + await pool.end(); + } +} + +run(); diff --git a/query_db_temp.js b/query_db_temp.js new file mode 100644 index 0000000..2462235 --- /dev/null +++ b/query_db_temp.js @@ -0,0 +1,24 @@ +require('dotenv').config(); +const { Client } = require('pg'); + +const client = new Client({ + user: process.env.DB_USER, + host: process.env.DB_HOST, + database: process.env.DB_NAME, + password: process.env.DB_PASSWORD, + port: process.env.DB_PORT +}); + +client.connect().then(async () => { + // Show tables + const res = await client.query('SELECT table_name FROM information_schema.tables WHERE table_schema = $1', ['geodaten']); + console.log('Tables:', res.rows.map(r => r.table_name)); + + // Get projects + const projRes = await client.query('SELECT * FROM geodaten.projekte'); + console.log('Projekte:', projRes.rows); + + await client.end(); +}).catch(e => { + console.error(e); +}); diff --git a/query_db_temp2.js b/query_db_temp2.js new file mode 100644 index 0000000..ef4c3c1 --- /dev/null +++ b/query_db_temp2.js @@ -0,0 +1,26 @@ +require('dotenv').config({ override: true }); +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 table_name FROM information_schema.tables WHERE table_schema = $1', ['geodaten']); + console.log('Tables:', res.rows.map(r => r.table_name)); + + const projRes = await pool.query('SELECT * FROM geodaten.projekte'); + console.log('Projekte:', projRes.rows); + } catch (err) { + console.error('Error:', err); + } finally { + await pool.end(); + } +} + +run(); diff --git a/query_db_temp3.js b/query_db_temp3.js new file mode 100644 index 0000000..89ef587 --- /dev/null +++ b/query_db_temp3.js @@ -0,0 +1,23 @@ +require('dotenv').config({ override: true }); +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 * FROM geodaten.leitungsverleaufe LIMIT 5'); + console.log('Leitungsverläufe:', res.rows); + } catch (err) { + console.error('Error:', err); + } finally { + await pool.end(); + } +} + +run(); diff --git a/query_db_temp4.js b/query_db_temp4.js new file mode 100644 index 0000000..8b61d2c --- /dev/null +++ b/query_db_temp4.js @@ -0,0 +1,27 @@ +require('dotenv').config({ override: true }); +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 = 'leitungsverleaufe' + `); + console.log('Columns:', res.rows); + } catch (err) { + console.error('Error:', err); + } finally { + await pool.end(); + } +} + +run(); diff --git a/query_db_temp5.js b/query_db_temp5.js new file mode 100644 index 0000000..7969424 --- /dev/null +++ b/query_db_temp5.js @@ -0,0 +1,27 @@ +require('dotenv').config({ override: true }); +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 = 'Freileitungen' + `); + console.log('Columns Freileitungen:', res.rows); + } catch (err) { + console.error('Error:', err); + } finally { + await pool.end(); + } +} + +run(); diff --git a/server.js b/server.js index a4ceb41..46cc6a4 100644 --- a/server.js +++ b/server.js @@ -683,9 +683,21 @@ app.get('/api/layers/leitungsverlaeufe', async (req, res) => { log('Unauthorized request to /api/layers/leitungsverlaeufe'); return res.status(401).json({ error: 'Nicht autorisiert. Authentik-Header fehlen.' }); } - log("Lade Leitungsverläufe aus Datenbank..."); + + const projectParam = req.query.project; + if (!projectParam) { + return res.status(400).json({ error: 'Projekt ID (project) fehlt.' }); + } + + const client = await pool.connect(); try { - const result = await pool.query( + const projId = await resolveProjectId(client, projectParam); + if (!projId) { + return res.status(404).json({ error: 'Projekt nicht gefunden.' }); + } + + log(`Lade Leitungsverläufe aus Datenbank für Projekt: ${projId}`); + const result = await client.query( `SELECT jsonb_build_object( 'type', 'FeatureCollection', 'features', COALESCE(jsonb_agg(features.feature), '[]'::jsonb) @@ -707,7 +719,7 @@ app.get('/api/layers/leitungsverlaeufe', async (req, res) => { ) ) AS feature FROM geodaten.leitungsverleaufe - WHERE art ILIKE '%wasserstoff%' + WHERE art ILIKE '%wasserstoff%' AND projekt_id = $1 UNION ALL @@ -722,12 +734,16 @@ app.get('/api/layers/leitungsverlaeufe', async (req, res) => { ) ) AS feature FROM geodaten."Freileitungen" - ) features` + WHERE projekt_id = $1 + ) features`, + [projId] ); res.json(result.rows[0].jsonb_build_object); } catch (err) { log(`FEHLER beim Laden der Leitungsverläufe: ${err.message}`); res.status(500).json({ error: err.message }); + } finally { + client.release(); } });