f4323e20de9bab51c1c863ec6c2b139669077236
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
- Architekturüberblick
- Voraussetzungen
- Installation & Entwicklung
- Konfiguration & Umgebungsvariablen
- Wichtige npm-Skripte
- Testing
- Verzeichnisstruktur
- Produktions-Build & Deployment
- 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
.nvmrcfürnvm use) - npm ≥ 11 (im Node-Release enthalten)
Für konsistente Builds immer mit exakt dieser Version arbeiten.
Installation & Entwicklung
- Abhängigkeiten installieren
npm ci - Lokale Entwicklung (React-Devserver)
npm start- Läuft auf Port 3000 (CRA Defaults).
- Nutzt Live-Reloading & Proxy-Konfiguration zu den Express-APIs.
- Express-Server (Produktion, lokal)
npm run build node server.js- Baut das Frontend (nach
build/) und startet den Express-Server (PortPORToder 3000). - Server lädt beim Start bestehende Sessions, Scheduler, Configs.
- Baut das Frontend (nach
⚠️ 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.jsneben 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
- Frontend bauen
npm run build - Server starten
node server.js - 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
userPreferencesabgelegt und durch/api/location/nearest-storeergä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 mismatch →
nvm use(siehe.nvmrc). - Leere Daten / keine Betriebe →
npm run build && node server.jsoder 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.examplefalls Variablen hinzugefügt werden. config/nicht committen.- README + Tests aktualisieren.
Description
Languages
JavaScript
98.1%
CSS
1.2%
HTML
0.4%
Shell
0.2%
Dockerfile
0.1%