Mongo-Zugriff passt jetzt
Adresse wird richtig geholt Daten werden in prop_flux gespeichert
This commit is contained in:
19
db/mongo.js
19
db/mongo.js
@@ -1,10 +1,12 @@
|
||||
import { MongoClient } from 'mongodb';
|
||||
import dotenv from 'dotenv';
|
||||
dotenv.config();
|
||||
|
||||
const MONGO_ROOT_USER = process.env.MONGO_ROOT_USER;
|
||||
const MONGO_ROOT_PASSWORD = process.env.MONGO_ROOT_PASSWORD;
|
||||
let MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017';
|
||||
|
||||
if (MONGO_ROOT_USER && MONGO_ROOT_PASSWORD) {
|
||||
/* if (MONGO_ROOT_USER && MONGO_ROOT_PASSWORD) {
|
||||
const uriParts = MONGO_URI.split('://');
|
||||
if (uriParts.length === 2) {
|
||||
const protocol = uriParts[0];
|
||||
@@ -12,9 +14,11 @@ if (MONGO_ROOT_USER && MONGO_ROOT_PASSWORD) {
|
||||
MONGO_URI = `${protocol}://${encodeURIComponent(MONGO_ROOT_USER)}:${encodeURIComponent(MONGO_ROOT_PASSWORD)}@${rest}`;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
const DB_NAME = process.env.DB_NAME || 'espdb';
|
||||
|
||||
let db, entriesCollection, usersCollection;
|
||||
let db, entriesCollection, usersCollection, prop_fluxCollection;
|
||||
|
||||
export async function initMongo() {
|
||||
const client = new MongoClient(MONGO_URI);
|
||||
@@ -22,9 +26,20 @@ export async function initMongo() {
|
||||
db = client.db(DB_NAME);
|
||||
entriesCollection = db.collection('entries');
|
||||
usersCollection = db.collection('users');
|
||||
prop_fluxCollection = db.collection('prop_flux');
|
||||
return { db, entriesCollection, usersCollection };
|
||||
}
|
||||
|
||||
export function getCollections() {
|
||||
return { db, entriesCollection, usersCollection };
|
||||
}
|
||||
|
||||
export const update_pflux = async(sn, doc) => {
|
||||
try {
|
||||
let r = await prop_fluxCollection.findOne({_id: sn})
|
||||
await prop_fluxCollection.updateOne({_id: sn},{ $set: { 'chip': doc}})
|
||||
return {"error": null}
|
||||
} catch (e) {
|
||||
return { "error": true, "what": e}
|
||||
}
|
||||
}
|
||||
@@ -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