Mongo-Zugriff passt jetzt
Adresse wird richtig geholt Daten werden in prop_flux gespeichert
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { getCollections } from '../db/mongo.js';
|
||||
import { MongoClient } from 'mongodb';
|
||||
import { update_pflux } from '../db/mongo.js';
|
||||
|
||||
export function registerAddressRoute(app, requireLogin) {
|
||||
const ADDRESS_SERVICE_URL = process.env.ADDRESS_SERVICE_URL || 'https://noise.fuerst-stuttgart.de/srv/getaddress';
|
||||
@@ -8,26 +9,59 @@ export function registerAddressRoute(app, requireLogin) {
|
||||
if (isNaN(sensorNumber)) {
|
||||
return res.status(400).json({ error: 'Ungültige Sensornummer' });
|
||||
}
|
||||
const url = ADDRESS_SERVICE_URL + `?sensorid=${encodeURIComponent(sensorNumber)}`;
|
||||
try {
|
||||
const r = await fetch(url, { headers: { 'Accept': 'application/json' } });
|
||||
if (!r.ok) {
|
||||
return res.status(502).json({ error: `Adressdienst Fehler (${r.status})` });
|
||||
}
|
||||
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();
|
||||
const addressString = [street, rightPart].filter(Boolean).join(', ');
|
||||
return res.json({
|
||||
address: addressString,
|
||||
parts: { street, plz, city }
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('Address lookup failed:', err);
|
||||
return res.status(504).json({ error: 'Adressdienst nicht erreichbar' });
|
||||
|
||||
// Verbindung zur sensor_data DB
|
||||
const mongoUri = process.env.MONGO_URI || 'mongodb://localhost:27017';
|
||||
const client = new MongoClient(mongoUri);
|
||||
await client.connect();
|
||||
const sensorDb = client.db('sensor_data');
|
||||
const properties = sensorDb.collection('properties');
|
||||
const propFlux = sensorDb.collection('prop_flux');
|
||||
|
||||
// Suche nach Sensornummer als _id
|
||||
const propEntry = await properties.findOne({ _id: sensorNumber });
|
||||
if (!propEntry) {
|
||||
await client.close();
|
||||
return res.status(404).json({ error: 'Sensor nicht gefunden' });
|
||||
}
|
||||
|
||||
// Kopiere nach prop_flux mit sensorNumber als _id
|
||||
try {
|
||||
await propFlux.replaceOne(
|
||||
{ _id: sensorNumber },
|
||||
{ ...propEntry, _id: sensorNumber },
|
||||
{ upsert: true }
|
||||
);
|
||||
} catch (err) {
|
||||
console.error('Fehler beim Kopieren nach prop_flux:', err);
|
||||
// Kein Abbruch, nur Logging
|
||||
}
|
||||
|
||||
// Adresse wie bisher holen (über die Sensornummer via nominative)
|
||||
let addressString = '';
|
||||
let addrParts = {};
|
||||
try {
|
||||
const url = ADDRESS_SERVICE_URL + `?sensorid=${encodeURIComponent(propEntry._id)}`;
|
||||
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);
|
||||
}
|
||||
|
||||
await client.close();
|
||||
return res.json({
|
||||
address: addressString,
|
||||
parts: addrParts,
|
||||
propEntry
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ObjectId } from 'mongodb';
|
||||
import { MongoAPIError, ObjectId } from 'mongodb';
|
||||
import bcrypt from 'bcrypt';
|
||||
import { getCollections } from '../db/mongo.js';
|
||||
import { getCollections, update_pflux } from '../db/mongo.js';
|
||||
|
||||
export function registerApiRoutes(app, requireLogin) {
|
||||
const { entriesCollection, usersCollection } = getCollections();
|
||||
@@ -25,14 +25,12 @@ export function registerApiRoutes(app, requireLogin) {
|
||||
sensorNumber = parseInt(sensorNumber, 10);
|
||||
try {
|
||||
const doc = {
|
||||
espId,
|
||||
sensorNumber,
|
||||
id: espId,
|
||||
name: name || '',
|
||||
description: description || '',
|
||||
address: address || '',
|
||||
createdAt: new Date()
|
||||
};
|
||||
await entriesCollection.insertOne(doc);
|
||||
await update_pflux(sensorNumber, doc)
|
||||
res.json({ success: true });
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
|
||||
Reference in New Issue
Block a user