import { MongoClient } from 'mongodb'; import { get_pflux } from '../db/mongo.js'; import { getCollections, update_pflux, clientClose } from '../db/mongo.js'; export function registerAddressRoute(app, requireLogin) { const APIHOST = process.env.APIHOST || 'https://noise.fuerst-stuttgart.de/srv/'; const holAdresse = async (id) => { // Adresse wie bisher holen (über die Sensornummer via nominative) let addressString = ''; let addrParts = {}; try { const url = APIHOST + 'getaddress/' + `?sensorid=${id}`; console.log(url) const r = await fetch(url, { headers: { 'Accept': 'application/json' } }); if (r.ok) { const data = await r.json(); const addrObj = data?.erg?.address || data?.address || {}; const street = addrObj.street ?? ''; const plz = addrObj.plz ?? ''; const city = addrObj.city ?? ''; const rightPart = [plz, city].filter(Boolean).join(' ').trim(); addressString = [street, rightPart].filter(Boolean).join(', '); addrParts = { street, plz, city }; } } catch (err) { console.error('Address lookup failed:', err); } return { address: addressString, parts: addrParts, } } app.get('/api/holAdresse/:sensorNumber', requireLogin, async (req, res) => { const sensorNumber = parseInt(req.params.sensorNumber, 10); if (isNaN(sensorNumber)) { return res.status(400).json({ error: 'Ungültige Sensornummer' }); } const addr = await holAdresse(sensorNumber) res.json(addr) }) app.get('/api/address/:sensorNumber', requireLogin, async (req, res) => { const sensorNumber = parseInt(req.params.sensorNumber, 10); if (isNaN(sensorNumber)) { return res.status(400).json({ error: 'Ungültige Sensornummer' }); } const { propertiesCollection, prop_fluxCollection } = getCollections(); // Suche nach Sensornummer als _id const propEntry = await propertiesCollection.findOne({ _id: sensorNumber }); if (!propEntry) { await clientClose() return res.status(404).json({ error: 'Sensor nicht gefunden' }); } // Sensor bekannt -> Wurde der schon rüber kopiert? const propsF = await get_pflux(sensorNumber) if(!propsF.erg) { // nein, also kopieren nach prop_flux mit sensorNumber als _id try { await prop_fluxCollection.replaceOne( { _id: sensorNumber }, { ...propEntry, _id: sensorNumber }, { upsert: true } ); } catch (err) { console.error('Fehler beim Kopieren nach prop_flux:', err); // Kein Abbruch, nur Logging } finally { await clientClose() } } const adr = await holAdresse(encodeURIComponent(propEntry._id)) adr.props = propsF return res.json(adr) }) }