feat(sprint-6): Phase 5 — Full grow calendar (sensors, photos, feeding, harvest traceability)
Deploy to Production / test (push) Has been cancelled
Deploy to Production / deploy (push) Has been cancelled

- V9 migration: grow_entries, grow_stage_logs, sensor_readings, grow_photos, feeding_logs
- 5 entities + GrowStage enum (7 stages) + SensorReadingType enum
- GrowCalendarService: CRUD + stage advancement + harvest-to-batch linking
- GrowCalendarController: 8 endpoints (/api/v1/grow/*)
- Frontend: /grow list + /grow/[id] detail (timeline, sensor charts, photo gallery, feeding log)
- Sensor chart (Recharts line: temp + humidity over time)
- Harvest completion links grow entry → batch (full traceability)
- React Query hooks for all grow operations
- Full i18n (de/en) with 7 grow stage labels
- Sidebar navigation updated with Anbau/Grow entry
This commit is contained in:
Patrick Plate
2026-06-12 22:51:45 +02:00
parent 05933a08ca
commit 076fd6f9b3
34 changed files with 1843 additions and 2 deletions
+46 -1
View File
@@ -444,5 +444,50 @@
"PAYMENT_RECEIVED": "Zahlung erhalten",
"PAYMENT_FAILED": "Zahlung fehlgeschlagen"
}
},
"grow": {
"title": "Anbau-Kalender",
"newGrow": "Neuen Anbau starten",
"name": "Anbau-Name",
"strain": "Sorte",
"stage": "Phase",
"startedAt": "Gestartet am",
"expectedHarvest": "Erwartete Ernte",
"daysInStage": "Tage in Phase",
"stages": {
"SEEDLING": "Sämling",
"VEGETATIVE": "Vegetativ",
"FLOWERING": "Blüte",
"HARVEST": "Ernte",
"DRYING": "Trocknung",
"CURING": "Fermentierung",
"COMPLETE": "Abgeschlossen"
},
"advanceStage": "Nächste Phase",
"completeHarvest": "Ernte abschließen",
"harvestGrams": "Erntemenge (g)",
"linkBatch": "Mit Charge verknüpfen",
"sensors": "Sensordaten",
"addReading": "Messwert hinzufügen",
"temperature": "Temperatur",
"humidity": "Luftfeuchtigkeit",
"co2": "CO₂",
"ph": "pH-Wert",
"ec": "EC-Wert",
"photos": "Fotos",
"addPhoto": "Foto hinzufügen",
"caption": "Beschriftung",
"feeding": "Düngung",
"addFeeding": "Düngung hinzufügen",
"nutrient": "Nährstoff",
"amountMl": "Menge (ml)",
"waterLiters": "Wasser (L)",
"phAfter": "pH danach",
"ecAfter": "EC danach",
"timeline": "Verlauf",
"noGrows": "Noch keine Anbau-Einträge.",
"created": "Anbau gestartet.",
"stageAdvanced": "Phase gewechselt zu {stage}.",
"harvestComplete": "Ernte abgeschlossen — {grams}g verknüpft mit Charge."
}
}
}