diff --git a/.gitignore b/.gitignore index 56fd03f7d..8dd5a03c2 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ nodeMap für 13 am 16.07.2024.zip Lastenheft.js # Dendron-Verzeichnis ignorieren /draw.io/ + + diff --git a/config/appVersion.js b/config/appVersion.js index f1a0dc562..99dcbb3b1 100644 --- a/config/appVersion.js +++ b/config/appVersion.js @@ -1,2 +1,2 @@ // /config/appVersion -export const APP_VERSION = "1.1.66"; +export const APP_VERSION = "1.1.67"; diff --git a/docs/checklist.md b/docs/checklist.md new file mode 100644 index 000000000..0a9e8e2c9 --- /dev/null +++ b/docs/checklist.md @@ -0,0 +1,40 @@ +# 🧾 Projektpflege-Checkliste + +Diese Datei dient als persönliche Gedächtnisstütze bei der Entwicklung und Pflege des Projekts. + +Bevor du einen Feature-, Refactor- oder Bugfix-Commit abschließt, geh diese Liste durch: + +--- + +## 📝 Dokumentation + +- [ ] Ist `README.md` noch aktuell (Projektziel, Setup, Nutzung)? +- [ ] Wurde `CHANGELOG.md` ergänzt (mit Datum, Version, Änderung)? +- [ ] Wurde ggf. ein neuer Punkt in `/docs/` ergänzt oder aktualisiert? +- [ ] Sind Beispiel-URLs oder sensible Daten **nicht im Code**, sondern dokumentiert? + +--- + +## 📦 Konfiguration + +- [ ] Ist `.env.local` aktuell und vollständig (für Entwickler/Testserver)? +- [ ] Wird jede Konfiguration ausschließlich über `.env.local` gesteuert? + +--- + +## ✅ Codequalität & Git + +- [ ] Ist die Git-Commit-Message beschreibend und lesbar (z. B. `feat:`, `fix:`, `docs:`)? +- [ ] Wurden unnötige Debug-Logs entfernt oder per `NODE_ENV` abgesichert? +- [ ] Wurden Änderungen getestet (lokal, ggf. auf Testsystem)? + +--- + +## 🧭 Onboarding-freundlich? + +- [ ] Könnte ein neuer Entwickler mit den aktuellen Dokumenten verstehen, was wie funktioniert? +- [ ] Gibt es Hinweise zur Architektur, API-Flows oder Besonderheiten im Code? + +--- + +Du kannst diese Checkliste in jedem Projekt beibehalten und auf deine Arbeitsweise anpassen. diff --git a/docs/frontend/pages/api.md b/docs/frontend/pages/api.md new file mode 100644 index 000000000..218d28f8d --- /dev/null +++ b/docs/frontend/pages/api.md @@ -0,0 +1,67 @@ +# 📘 API-Routen in `/pages/api/` + +Dieses Dokument beschreibt die internen API-Routen der Anwendung (Next.js API Routes) und erklärt die verwendeten URL-Parameter sowie Konventionen bei der Nutzung im Backend. + +--- + +## 🔗 Übergabeparameter aus TALAS.web + +Beim Aufruf der Anwendung über TALAS.web werden die folgenden URL-Parameter übergeben: + +| Parameter | Bedeutung | Verwendung im Code | +|-----------|------------------|---------------------------| +| `m` | Map-ID (`idMap`) | `req.query.m` | +| `u` | User-ID (`idUser`)| `req.query.u` | + +> ⚠️ Es wird bewusst **nicht** `idMap` oder `idUser` verwendet, da TALAS mit Kurzparametern arbeitet. + +### Beispiel: + +```ts +const idMap = req.query.m; +const idUser = req.query.u; +``` + +--- + +## 🛠 Zweck des Verzeichnisses `/pages/api/` + +Alle Dateien in diesem Verzeichnis definieren serverseitige Endpunkte. Diese: + +- werden **nur auf dem Server ausgeführt** +- sind über `fetch('/api/...')` vom Frontend aufrufbar +- dienen als **Proxy zu SOAP-Webservices** oder **Zugriff auf die Datenbank** + +--- + +## 📁 Beispiel: Aufruf eines Webservice + +```bash +GET /api/gisSystemStatic?m=10&u=484 +``` + +Dieser Request wird serverseitig weitergeleitet an: + +``` +http://[SERVER]/talas5/ClientData/WebServiceMap.asmx/GisSystemStatic?idMap=10&idUser=484 +``` + +--- + +## 📄 Übersicht interner API-Routen + +| API-Route | Beschreibung | +|----------------------------------|------------------------------------------| +| `/api/gisSystemStatic` | Proxy zu WebService GisSystemStatic | +| `/api/gisStationsStaticDistrict` | Geräte-Liste inkl. Bereich | +| `/api/gisStationsMeasurements` | Live-Messwerte der Geräte | +| `/api/talas_v5_DB/pois/readLocations` | POIs aus der Datenbank (MySQL) | +| `/api/talas_v5_DB/device/getAllStationsNames` | Gerätnamen aus DB | + +--- + +## 🔐 Sicherheitshinweis + +- Kein sensibler Parameter darf hart codiert sein +- Alle Server-URLs werden über `.env.local` konfiguriert +- Nur `m` und `u` aus `req.query` verwenden – keine Fallbacks oder Defaults \ No newline at end of file diff --git a/docs/frontend/redux/api/fromWebService.md b/docs/frontend/redux/api/fromWebService.md index cbf130b8c..d2ce8de41 100644 --- a/docs/frontend/redux/api/fromWebService.md +++ b/docs/frontend/redux/api/fromWebService.md @@ -8,12 +8,31 @@ In diesem Verzeichnis befinden sich alle Webservice-Fetch-Funktionen für die Ko Jede Funktion liest `idMap` und `idUser` **ausschließlich aus der URL**, wie sie von TALAS.web übergeben werden. -Beispiel: +--- + +## Übergabe der Parameter über URL (`m`, `u`) + +TALAS.web ruft die Kartenansicht in der Regel so auf: + +``` +http://localhost:3000/?m=10&u=484 +``` + +Daraus ergeben sich folgende Zuweisungen: + +| URL-Parameter | Bedeutung | Variable im Code | +| ------------- | --------- | -------------------------------- | +| `m` | `idMap` | `const idMap = params.get("m")` | +| `u` | `idUser` | `const idUser = params.get("u")` | + +🔔 Achtung: Diese Kurzform (`m`, `u`) ist systembedingt durch TALAS.web vorgegeben und **soll nicht durch `idMap` oder `idUser` ersetzt werden**, da die Parameter sonst nicht erkannt werden. + +### Beispiel: ```ts const params = new URLSearchParams(window.location.search); -const idMap = params.get("idMap"); -const idUser = params.get("idUser"); +const idMap = params.get("m"); // statt "idMap" +const idUser = params.get("u"); // statt "idUser" ``` --- diff --git a/pages/api/gisStationsMeasurements.js b/pages/api/gisStationsMeasurements.js index 3f48ff8a7..0c9339587 100644 --- a/pages/api/gisStationsMeasurements.js +++ b/pages/api/gisStationsMeasurements.js @@ -17,7 +17,7 @@ export default async function handler(req, res) { try { // Parameter aus URL oder Fallback-Werte verwenden - const idMap = req.query.m || req.query.idMap; // 'm' = idMap + const idMap = req.query.m; // 'm' = idMap // Überprüfung, ob idMap fehlt if (!idMap) { diff --git a/pages/api/gisStationsStaticDistrict.js b/pages/api/gisStationsStaticDistrict.js index 45a3c0bf1..cd5a9f584 100644 --- a/pages/api/gisStationsStaticDistrict.js +++ b/pages/api/gisStationsStaticDistrict.js @@ -16,8 +16,8 @@ export default async function handler(req, res) { try { // Parameter aus URL oder Fallback-Werte verwenden - const idMap = req.query.m || req.query.idMap; // 'm' = idMap - const idUser = req.query.u || req.query.idUser; // 'u' = idUser + const idMap = req.query.m; // 'm' = idMap + const idUser = req.query.u; // 'u' = idUser // Überprüfung, ob Parameter fehlen if (!idMap || !idUser) { diff --git a/pages/api/gisStationsStatusDistrict.js b/pages/api/gisStationsStatusDistrict.js index 4300b20f0..c02922abb 100644 --- a/pages/api/gisStationsStatusDistrict.js +++ b/pages/api/gisStationsStatusDistrict.js @@ -15,8 +15,8 @@ export default async function handler(req, res) { try { // Parameter aus URL oder Fallback-Werte verwenden - const idMap = req.query.m || req.query.idMap; // 'm' = idMap - const idUser = req.query.u || req.query.idUser; // 'u' = idUser + const idMap = req.query.m; // 'm' = idMap + const idUser = req.query.u; // 'u' = idUser // Überprüfung, ob Parameter fehlen if (!idMap || !idUser) { diff --git a/pages/api/gisSystemStatic.js b/pages/api/gisSystemStatic.js index f082bf165..7e7dbaf59 100644 --- a/pages/api/gisSystemStatic.js +++ b/pages/api/gisSystemStatic.js @@ -15,8 +15,8 @@ export default async function handler(req, res) { try { // Parameter aus URL oder Fallback-Werte verwenden - const idMap = req.query.m || req.query.idMap; // 'm' = idMap - const idUser = req.query.u || req.query.idUser; // 'u' = idUser + const idMap = req.query.m; // 'm' = idMap + const idUser = req.query.u; // 'u' = idUser // Überprüfung, ob Parameter fehlen if (!idMap || !idUser) { diff --git a/redux/api/fromWebService/fetchGisStationsMeasurements.js b/redux/api/fromWebService/fetchGisStationsMeasurements.js index 16958545c..c5b66013c 100644 --- a/redux/api/fromWebService/fetchGisStationsMeasurements.js +++ b/redux/api/fromWebService/fetchGisStationsMeasurements.js @@ -4,8 +4,8 @@ const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL; export const fetchGisStationsMeasurements = async () => { const params = new URLSearchParams(window.location.search); - const idMap = params.get("idMap"); - const idUser = params.get("idUser"); + const idMap = params.get("m"); + const idUser = params.get("u"); //console.log("🔍 fetchGisStationsMeasurements - URL:", `${apiBaseUrl}/GisStationsMeasurements?idMap=${idMap}&idUser=${idUser}`); diff --git a/redux/api/fromWebService/fetchGisStationsStatic.js b/redux/api/fromWebService/fetchGisStationsStatic.js index b2241a99c..b8333b9f4 100644 --- a/redux/api/fromWebService/fetchGisStationsStatic.js +++ b/redux/api/fromWebService/fetchGisStationsStatic.js @@ -5,8 +5,8 @@ const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL; export const fetchGisStationsStatic = async () => { try { const params = new URLSearchParams(window.location.search); - const idMap = params.get("idMap"); - const idUser = params.get("idUser"); + const idMap = params.get("m"); + const idUser = params.get("u"); const response = await fetch(`${apiBaseUrl}/GisStationsStatic?idMap=${idMap}`); //console.log("📡 API Response Status:", response.status); diff --git a/redux/api/fromWebService/fetchGisStationsStaticDistrict.js b/redux/api/fromWebService/fetchGisStationsStaticDistrict.js index 4366eb91a..56fd19a21 100644 --- a/redux/api/fromWebService/fetchGisStationsStaticDistrict.js +++ b/redux/api/fromWebService/fetchGisStationsStaticDistrict.js @@ -4,10 +4,10 @@ const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL; export const fetchGisStationsStaticDistrict = async () => { const params = new URLSearchParams(window.location.search); - const idMap = params.get("idMap"); - const idUser = params.get("idUser"); + const idMap = params.get("m"); + const idUser = params.get("u"); - // console.log("🔍 fetchGisStationsStaticDistrict - URL:", `${apiBaseUrl}/GisStationsStaticDistrict?idMap=${idMap}&idUser=${idUser}`); + console.log("🔍 fetchGisStationsStaticDistrict - URL:", `${apiBaseUrl}/GisStationsStaticDistrict?idMap=${idMap}&idUser=${idUser}`); const response = await fetch(`${apiBaseUrl}/GisStationsStaticDistrict?idMap=${idMap}&idUser=${idUser}`); diff --git a/redux/api/fromWebService/fetchGisStationsStatusDistrict.js b/redux/api/fromWebService/fetchGisStationsStatusDistrict.js index b885425e1..60b042343 100644 --- a/redux/api/fromWebService/fetchGisStationsStatusDistrict.js +++ b/redux/api/fromWebService/fetchGisStationsStatusDistrict.js @@ -4,10 +4,10 @@ const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL; export const fetchGisStationsStatusDistrict = async () => { const params = new URLSearchParams(window.location.search); - const idMap = params.get("idMap"); - const idUser = params.get("idUser"); + const idMap = params.get("m"); + const idUser = params.get("u"); - //console.log("🔍 fetchGisStationsStatusDistrict - URL:", `${apiBaseUrl}/GisStationsStatusDistrict?idMap=${idMap}&idUser=${idUser}`); + console.log("🔍 fetchGisStationsStatusDistrict - URL:", `${apiBaseUrl}/GisStationsStatusDistrict?idMap=${idMap}&idUser=${idUser}`); const response = await fetch(`${apiBaseUrl}/GisStationsStatusDistrict?idMap=${idMap}&idUser=${idUser}`); diff --git a/redux/api/fromWebService/fetchGisSystemStatic.js b/redux/api/fromWebService/fetchGisSystemStatic.js index 6cc33e7c0..910d48b5a 100644 --- a/redux/api/fromWebService/fetchGisSystemStatic.js +++ b/redux/api/fromWebService/fetchGisSystemStatic.js @@ -4,9 +4,10 @@ const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL; export async function fetchGisSystemStatic() { const params = new URLSearchParams(window.location.search); - const idMap = params.get("idMap"); - const idUser = params.get("idUser"); - + const idMap = params.get("m"); + const idUser = params.get("u"); + //console.log("🔍 fetchGisSystemStatic - idMap:", idMap); + //console.log("🔍 fetchGisSystemStatic - idUser:", idUser); //console.log("🔍 fetchGisSystemStatic - URL:", `${apiBaseUrl}/GisSystemStatic?idMap=${idMap}&idUser=${idUser}`); const response = await fetch(`${apiBaseUrl}/GisSystemStatic?idMap=${idMap}&idUser=${idUser}`);