2025-11-11 00:02:23 +01:00
2025-11-09 13:50:17 +01:00
2025-11-09 11:02:09 +01:00
2025-11-10 21:14:20 +01:00
2025-11-11 00:02:23 +01:00
2025-11-09 15:54:31 +01:00
2025-11-10 11:15:09 +01:00
2025-11-10 10:10:57 +01:00
2025-11-10 23:00:52 +01:00
2025-11-09 14:46:36 +01:00
2025-11-10 10:10:57 +01:00
2025-11-10 22:55:44 +01:00
2025-11-09 11:02:09 +01:00
2025-11-10 23:25:08 +01:00
2025-11-10 22:45:44 +01:00

pickup-config

Foodsharing pickup-config ist eine kombinierte React/Express-Anwendung, mit der Teams ihre Pickup-Slots konfigurieren, Benachrichtigungen pflegen und das Store-Watch-Monitoring (Team-Status) steuern können. Die App synchronisiert regelmäßig Betriebe, unterstützt Admin-spezifische Einstellungen und speichert benutzerbezogene Präferenzen (z.B. Geokoordinaten) lokal im config/-Verzeichnis.


Inhalt

  1. Architekturüberblick
  2. Voraussetzungen
  3. Installation & Entwicklung
  4. Konfiguration & Umgebungsvariablen
  5. Wichtige npm-Skripte
  6. Testing
  7. Verzeichnisstruktur
  8. Produktions-Build & Deployment
  9. Häufige Workflows

Architekturüberblick

Bereich Beschreibung
Client (React) Lives unter src/ (CRA). Ansicht „Slots buchen“ verwaltet Pickup-Konfigurationen, „Betriebs-Monitoring“ bündelt Store-Watch. Komponenten sind funktionsorientiert, Hooks kapseln API-Logik.
Server (Express) server.js liefert Produktions-Builds, proxied API-Aufrufe zur Foodsharing-API, persistiert Configs on-disk (config/) und betreibt den Scheduler (services/).
Scheduler / Services services/ enthält Cron-Jobs (Pickup & Store-Watch), Notification-Integrationen sowie Stores für Config, Watcher, Preferences, etc.
Datenablage config/ (lokal verbleibend, gitignored) speichert Laufzeitdaten wie pickup-config.json, Admin-Settings, Store-Watch-Status u.a.
Deployment Dockerfile + docker-compose.yml ermöglichen containerisierte Builds.

Voraussetzungen

  • Node.js v24.11.0 (siehe .nvmrc für nvm use)
  • npm ≥ 11 (im Node-Release enthalten)

Für konsistente Builds immer mit exakt dieser Version arbeiten.


Installation & Entwicklung

  1. Abhängigkeiten installieren
    npm ci
    
  2. Lokale Entwicklung (React-Devserver)
    npm start
    
    • Läuft auf Port 3000 (CRA Defaults).
    • Nutzt Live-Reloading & Proxy-Konfiguration zu den Express-APIs.
  3. Express-Server (Produktion, lokal)
    npm run build
    node server.js
    
    • Baut das Frontend (nach build/) und startet den Express-Server (Port PORT oder 3000).
    • Server lädt beim Start bestehende Sessions, Scheduler, Configs.

⚠️ Die Foodsharing-APIs erfordern gültige Credentials. Hinterlege sie per UI (Login) oder config/.


Konfiguration & Umgebungsvariablen

Variable Beschreibung
PORT Port für node server.js. Default: 3000.
ADMIN_EMAIL E-Mail-Adresse, die Admin-Rechte erhält (Vergleich in server.js).

Weitere Laufzeitdaten:

  • config/ persistente JSON-Dateien (nicht ins Repo einchecken).
  • data/ ggf. Seeds (defaultConfig.js).
  • .env / .env.example ggf. ergänzen, wenn neue Variablen eingeführt werden.

Wichtige npm-Skripte

Script Zweck
npm start CRA-Devserver inkl. Live-Reload.
npm run build Produktionsbundle (CRA).
npm test Jest/RTL-Tests (Watch-Mode). Für CI CI=true npm test.
node server.js Express-Server (liefert build/, API & Scheduler).

Docker:

docker-compose up --build

Testing

Standardtests laufen mit:

CI=true npm test
  • Nutzt React Testing Library.
  • Ergänzende Tests pro Komponente (Datei *.test.js neben den Komponenten).
  • Für Scheduler/Services sind Integrationstests sinnvoll (derzeit nicht vorhanden).

Verzeichnisstruktur

Pfad Inhalt
src/ React-Quellcode (Komponenten, Hooks, Utils).
public/ CRA-Statics.
services/ Node-Services (Scheduler, Notification, Stores, AdminConfig).
config/ Laufzeitdaten (JSON). Gitignored niemals commiten.
build/ Output von npm run build. Niemals manuell anpassen.
docker-compose.yml, Dockerfile, rebuildContainer.sh Deployment-Artefakte.

Produktions-Build & Deployment

  1. Frontend bauen
    npm run build
    
  2. Server starten
    node server.js
    
  3. Container (optional)
    docker-compose up --build
    
    • Container läuft mit dem gebauten Bundle & Express-Server.

Beachte: config/ muss beschreibbar sein, da dort u.a. Session- und Watcher-Infos landen.


Häufige Workflows

Slots buchen (Dashboard, „Slots buchen“ Tab)

  • Login -> Slots konfigurieren (Aktivieren/Deaktivieren, Wochentage, Datumsspannen).
  • Änderungen via „Konfiguration speichern“ persistieren.
  • Standort ermitteln für Entfernungssortierung (wird in userPreferences abgelegt und durch /api/location/nearest-store ergänzt).

Store-Watch

  • Tab „Betriebs-Monitoring“.
  • Regionen laden, Team-Status verfolgen, Watchlist pflegen.
  • Admin-Buttons („Regionen neu laden“ etc.) erscheinen nur für Admins.

Notifications

  • Zahnrad-Button öffnet das Notification-Panel (auf beiden Tabs).
  • Erlaubt ntfy- und Telegram-Einstellungen, Standortverwaltung sowie Testversand.

Admin-Settings

  • Tab „Admin“ (nur Admin-E-Mail).
  • Globale Cron-/Delay-Einstellungen, Notifications für alle, Ignored Slots.
  • „Zu Slots buchen“-Button führt zurück zum Hauptdashboard.

Hilfe / Troubleshooting

  • Node-Version mismatchnvm use (siehe .nvmrc).
  • Leere Daten / keine Betriebenpm run build && node server.js oder in der UI „Betriebe aktualisieren“ (Admin), ggf. Logs prüfen.
  • Standortbestimmung → Browser muss Geolocation erlauben; Backend nutzt /api/location/nearest-store, benötigt entsprechende Store-Daten (Regionen).

Bei neuen Features:

  • Update .env.example falls Variablen hinzugefügt werden.
  • config/ nicht committen.
  • README + Tests aktualisieren.
Description
No description provided
Readme 3.5 MiB
Languages
JavaScript 98.1%
CSS 1.2%
HTML 0.4%
Shell 0.2%
Dockerfile 0.1%