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 { MongoClient } from 'mongodb';
|
||||||
|
import dotenv from 'dotenv';
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
const MONGO_ROOT_USER = process.env.MONGO_ROOT_USER;
|
const MONGO_ROOT_USER = process.env.MONGO_ROOT_USER;
|
||||||
const MONGO_ROOT_PASSWORD = process.env.MONGO_ROOT_PASSWORD;
|
const MONGO_ROOT_PASSWORD = process.env.MONGO_ROOT_PASSWORD;
|
||||||
let MONGO_URI = process.env.MONGO_URI || 'mongodb://localhost:27017';
|
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('://');
|
const uriParts = MONGO_URI.split('://');
|
||||||
if (uriParts.length === 2) {
|
if (uriParts.length === 2) {
|
||||||
const protocol = uriParts[0];
|
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}`;
|
MONGO_URI = `${protocol}://${encodeURIComponent(MONGO_ROOT_USER)}:${encodeURIComponent(MONGO_ROOT_PASSWORD)}@${rest}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
const DB_NAME = process.env.DB_NAME || 'espdb';
|
const DB_NAME = process.env.DB_NAME || 'espdb';
|
||||||
|
|
||||||
let db, entriesCollection, usersCollection;
|
let db, entriesCollection, usersCollection, prop_fluxCollection;
|
||||||
|
|
||||||
export async function initMongo() {
|
export async function initMongo() {
|
||||||
const client = new MongoClient(MONGO_URI);
|
const client = new MongoClient(MONGO_URI);
|
||||||
@@ -22,9 +26,20 @@ export async function initMongo() {
|
|||||||
db = client.db(DB_NAME);
|
db = client.db(DB_NAME);
|
||||||
entriesCollection = db.collection('entries');
|
entriesCollection = db.collection('entries');
|
||||||
usersCollection = db.collection('users');
|
usersCollection = db.collection('users');
|
||||||
|
prop_fluxCollection = db.collection('prop_flux');
|
||||||
return { db, entriesCollection, usersCollection };
|
return { db, entriesCollection, usersCollection };
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getCollections() {
|
export function getCollections() {
|
||||||
return { db, entriesCollection, usersCollection };
|
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) {
|
export function registerAddressRoute(app, requireLogin) {
|
||||||
const ADDRESS_SERVICE_URL = process.env.ADDRESS_SERVICE_URL || 'https://noise.fuerst-stuttgart.de/srv/getaddress';
|
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)) {
|
if (isNaN(sensorNumber)) {
|
||||||
return res.status(400).json({ error: 'Ungültige Sensornummer' });
|
return res.status(400).json({ error: 'Ungültige Sensornummer' });
|
||||||
}
|
}
|
||||||
const url = ADDRESS_SERVICE_URL + `?sensorid=${encodeURIComponent(sensorNumber)}`;
|
|
||||||
try {
|
// Verbindung zur sensor_data DB
|
||||||
const r = await fetch(url, { headers: { 'Accept': 'application/json' } });
|
const mongoUri = process.env.MONGO_URI || 'mongodb://localhost:27017';
|
||||||
if (!r.ok) {
|
const client = new MongoClient(mongoUri);
|
||||||
return res.status(502).json({ error: `Adressdienst Fehler (${r.status})` });
|
await client.connect();
|
||||||
}
|
const sensorDb = client.db('sensor_data');
|
||||||
const data = await r.json();
|
const properties = sensorDb.collection('properties');
|
||||||
const addrObj = data?.erg?.address || data?.address || {};
|
const propFlux = sensorDb.collection('prop_flux');
|
||||||
const street = addrObj.street ?? '';
|
|
||||||
const plz = addrObj.plz ?? '';
|
// Suche nach Sensornummer als _id
|
||||||
const city = addrObj.city ?? '';
|
const propEntry = await properties.findOne({ _id: sensorNumber });
|
||||||
const rightPart = [plz, city].filter(Boolean).join(' ').trim();
|
if (!propEntry) {
|
||||||
const addressString = [street, rightPart].filter(Boolean).join(', ');
|
await client.close();
|
||||||
return res.json({
|
return res.status(404).json({ error: 'Sensor nicht gefunden' });
|
||||||
address: addressString,
|
|
||||||
parts: { street, plz, city }
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Address lookup failed:', err);
|
|
||||||
return res.status(504).json({ error: 'Adressdienst nicht erreichbar' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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 bcrypt from 'bcrypt';
|
||||||
import { getCollections } from '../db/mongo.js';
|
import { getCollections, update_pflux } from '../db/mongo.js';
|
||||||
|
|
||||||
export function registerApiRoutes(app, requireLogin) {
|
export function registerApiRoutes(app, requireLogin) {
|
||||||
const { entriesCollection, usersCollection } = getCollections();
|
const { entriesCollection, usersCollection } = getCollections();
|
||||||
@@ -25,14 +25,12 @@ export function registerApiRoutes(app, requireLogin) {
|
|||||||
sensorNumber = parseInt(sensorNumber, 10);
|
sensorNumber = parseInt(sensorNumber, 10);
|
||||||
try {
|
try {
|
||||||
const doc = {
|
const doc = {
|
||||||
espId,
|
id: espId,
|
||||||
sensorNumber,
|
|
||||||
name: name || '',
|
name: name || '',
|
||||||
description: description || '',
|
description: description || '',
|
||||||
address: address || '',
|
|
||||||
createdAt: new Date()
|
createdAt: new Date()
|
||||||
};
|
};
|
||||||
await entriesCollection.insertOne(doc);
|
await update_pflux(sensorNumber, doc)
|
||||||
res.json({ success: true });
|
res.json({ success: true });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
Reference in New Issue
Block a user