From afbb1795c01ea56e456e6ccfeee64ba97ae1eb2d Mon Sep 17 00:00:00 2001
From: Hannah <hz018@hdm-stuttgart.de>
Date: Tue, 16 Jan 2024 11:34:46 +0100
Subject: [PATCH] =?UTF-8?q?#51=20show=20"Pflanzen=20in=20deinem=20Garten?=
 =?UTF-8?q?=20die=20gegossen=20werden=20m=C3=BCssen"=20and=20"Pflanzen=20a?=
 =?UTF-8?q?us=20deinem=20Garten=20die=20bereit=20sind=20eingepflanzt=20zu?=
 =?UTF-8?q?=20werden"=20in=20Grandmabubble=20on=20Frontend?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 growbros-frontend/src/components/Grandma.tsx  | 47 ++++++++++++++++---
 .../src/utils/BackendConnectorImpl.ts         | 29 ++++++++++++
 .../src/utils/IBackendConnector.ts            |  6 +--
 .../controllers/GrandmaController.java        |  7 ++-
 .../mi/growbros/service/GrandmaService.java   | 23 ++++-----
 5 files changed, 86 insertions(+), 26 deletions(-)

diff --git a/growbros-frontend/src/components/Grandma.tsx b/growbros-frontend/src/components/Grandma.tsx
index 00b8ee4..87f4a4f 100644
--- a/growbros-frontend/src/components/Grandma.tsx
+++ b/growbros-frontend/src/components/Grandma.tsx
@@ -13,10 +13,9 @@ function Grandma() {
 
     const [growingTip, setGrowingTip] = useState<string>('');
     const [plantsReadyToGrow, setPlantsReadyToGrow] = useState<string>('');
+    const [plantsReadyToWater, setPlantsReadyToWater] = useState<string>('');
+    const [plantsReadyToHarvest, setPlantsReadyToHarvest] = useState<string>('');
 
-    //TODO plantsReadyToWater and toHarvest are missing
-    //const [plantsReadyToWater, setPlantsReadyToWater] = useState<string>('');
-    //const [plantsReadyToHarvest, setPlantsReadyToHarvest] = useState<string>('');
     const [error, setError] = useState<object>();
     const [currentDisplay, setCurrentDisplay] = useState<string>(growingTip);
     const [displayIndex, setDisplayIndex] = useState<number>(0);
@@ -38,10 +37,10 @@ function Grandma() {
                 setCurrentDisplay(plantsReadyToGrow);
                 break;
             case 2:
-                setCurrentDisplay(`Folgende Pflanzen in deinem Garten müssen gegossen werden:`);
+                setCurrentDisplay(plantsReadyToWater);
                 break;
             case 3:
-                setCurrentDisplay(`Folgende Pflanzen in deinem Garten sind bereit geerntet zu werden:`);
+                setCurrentDisplay(plantsReadyToHarvest);
                 break;
             default:
                 setCurrentDisplay(growingTip);
@@ -64,9 +63,11 @@ function Grandma() {
         };
 
         document.addEventListener("click", handleDocumentClick);
+
         fetchGrowingTip();
         fetchPlantsReadyToGrow();
-
+        fetchPlantsNeedingWatering();
+        fetchPlantsReadyToHarvest();
 
         return () => {
             //entfernt Event-Listener
@@ -94,7 +95,39 @@ function Grandma() {
                 setPlantsReadyToGrow("Füge Pflanzen die du gerne in der Zukunft einpflanzen möchtest deiner Wunschliste hinzu.")
             } else {
                 const plantNames = plants.map(plant => plant.name).join(', ');
-                setPlantsReadyToGrow(plantNames);
+                setPlantsReadyToGrow("Folgende Pflanzen aus deiner Wunschliste wären bereit eingepflanzt zu werden:" + plantNames);
+            }
+        }
+    }
+
+    const fetchPlantsNeedingWatering = async () => {
+        const response = await bc.getPlantsNeedingWatering();
+        if(response.err) {
+            setError(response.err);
+        } else {
+            const plants: Plant[] = response.value ?? [];
+            if(plants.length === 0) {
+                console.log("no plants ready to water");
+                setPlantsReadyToWater("Du hast noch keine Pflanzen in deinem Garten. Füge Pflanzen die du bereits eingepflanzt hast hinzu.")
+            } else {
+                const plantNames = plants.map(plant => plant.name).join(', ');
+                setPlantsReadyToWater("Folgende Pflanzen in deinem Garten müssen gegossen werden:" + plantNames);
+            }
+        }
+    }
+
+    const fetchPlantsReadyToHarvest = async () => {
+        const response = await bc.getPlantsReadyToHarvest();
+        if(response.err) {
+            setError(response.err);
+        } else {
+            const plants: Plant[] = response.value ?? [];
+            if(plants.length === 0) {
+                console.log("no plants ready to harvest");
+                setPlantsReadyToHarvest("Du hast noch keine Pflanzen in deinem Garten. Füge Pflanzen die du bereits eingepflanzt hast hinzu.")
+            } else {
+                const plantNames = plants.map(plant => plant.name).join(', ');
+                setPlantsReadyToHarvest("Folgende Pflanzen in deinem Garten können geerntet werden:" + plantNames);
             }
         }
     }
diff --git a/growbros-frontend/src/utils/BackendConnectorImpl.ts b/growbros-frontend/src/utils/BackendConnectorImpl.ts
index be9a045..7748367 100644
--- a/growbros-frontend/src/utils/BackendConnectorImpl.ts
+++ b/growbros-frontend/src/utils/BackendConnectorImpl.ts
@@ -201,6 +201,35 @@ export class BackendConnectorImpl implements IBackendConnector {
         return result;
     }
 
+    async getPlantsNeedingWatering(): Promise<FetchResult<Plant[]>> {
+        let result: FetchResult<Plant[]>;
+        try {
+            const response = await this.makeFetchWithAuth("/Grandma/getPlantsNeedingWatering");
+            const json = await response.json();
+            result = this.parsePlants(json);
+        } catch(e) {
+            console.error("An error occurred while getting plants needing watering");
+            console.error(e);
+            result = {err: e};
+        }
+        return result;
+    }
+
+    async getPlantsReadyToHarvest(): Promise<FetchResult<Plant[]>> {
+        let result: FetchResult<Plant[]>;
+        try {
+            const response = await this.makeFetchWithAuth("/Grandma/getPlantsReadyToHarvest");
+            const json = await response.json();
+            result = this.parsePlants(json);
+        } catch(e) {
+            console.error("An error occurred while getting plants ready to harvest");
+            console.error(e);
+            result = {err: e};
+        }
+        return result;
+    }
+
+
     async getWishlistEntries(sort?: string): Promise<FetchResult<Plant[]>> {
         let result: FetchResult<Plant[]>;
         try {
diff --git a/growbros-frontend/src/utils/IBackendConnector.ts b/growbros-frontend/src/utils/IBackendConnector.ts
index 2d4bf07..e8d8176 100644
--- a/growbros-frontend/src/utils/IBackendConnector.ts
+++ b/growbros-frontend/src/utils/IBackendConnector.ts
@@ -34,9 +34,7 @@ export interface IBackendConnector {
 
     getPlantsReadyToGrow(): Promise<FetchResult<Plant[]>>;
 
+    getPlantsNeedingWatering(): Promise<FetchResult<Plant[]>>;
 
-    //TODO Implement GardenEntry[] Type
-    /*getPlantsNeedingWatring(): Promise<FetchResult<Plant[]>>;
-
-    getPlantsReadyToHarvest(): Promise<FetchResult<GardenEntry[]>>;*/
+    getPlantsReadyToHarvest(): Promise<FetchResult<Plant[]>>;
 }
\ No newline at end of file
diff --git a/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java b/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java
index e90d77e..01e4217 100644
--- a/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java
+++ b/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java
@@ -32,11 +32,10 @@ public class GrandmaController {
     }
     @GetMapping ("/getPlantsNeedingWatering")
     public ResponseEntity<List<Plant>> getPlantsNeedingWatring (@AuthenticationPrincipal User user){
-        return ResponseEntity.ok(grandmaService.getGardenEntriesNeedingWatering(user));
+        return ResponseEntity.ok(grandmaService.getPlantsInGardenNeedingWatering(user));
     }
     @GetMapping("/getPlantsReadyToHarvest")
-    public ResponseEntity<List<GardenEntry>> getPlantsReadyToHarvest(@AuthenticationPrincipal User user){
-        List<GardenEntry> plantsReadyToHarvest = grandmaService.getPlantsReadyToHarvest(user);
-        return ResponseEntity.ok(plantsReadyToHarvest);
+    public ResponseEntity<List<Plant>> getPlantsReadyToHarvest(@AuthenticationPrincipal User user){
+        return ResponseEntity.ok(grandmaService.getPlantsReadyToHarvest(user));
     }
 }
diff --git a/src/main/java/hdm/mi/growbros/service/GrandmaService.java b/src/main/java/hdm/mi/growbros/service/GrandmaService.java
index 2b1ec5c..5b7fc89 100644
--- a/src/main/java/hdm/mi/growbros/service/GrandmaService.java
+++ b/src/main/java/hdm/mi/growbros/service/GrandmaService.java
@@ -55,7 +55,7 @@ public class GrandmaService {
         return plantsReadyToGrow;
     }
 
-    public List<Plant> getGardenEntriesNeedingWatering(User user)  {
+    public List<Plant> getPlantsInGardenNeedingWatering(User user)  {
         List<Plant> plantsNeedingWatering = new ArrayList<>();
         List<GardenEntry> plantsInUsersGarden = gardenRepository.findByUser(user);
 
@@ -63,7 +63,7 @@ public class GrandmaService {
             return plantsNeedingWatering;
         }
 
-        for( int index = 1 ; index < plantsInUsersGarden.size();index++){
+        for(int index = 1 ; index < plantsInUsersGarden.size();index++){
             GardenEntry gardenEntry = plantsInUsersGarden.get(index);
             if(gardenEntry.getWateringFrequency() == 0){
                 switch (gardenEntry.getPlant().getWaterDemand()){
@@ -100,20 +100,21 @@ public class GrandmaService {
         return 0;
     }
 
-    public List<GardenEntry> getPlantsReadyToHarvest (User user){
-
-
-        List<GardenEntry> usersPlants = gardenRepository.findByUser(user);
+    public List<Plant> getPlantsReadyToHarvest (User user){
+        List<Plant> plantsReadyToHarvest = new ArrayList<>();
+        List<GardenEntry> plantsInUsersGarden = gardenRepository.findByUser(user);
 
-        List<GardenEntry> plantsReadyToHarvest = new ArrayList<>();
+        if(plantsInUsersGarden.isEmpty()) {
+            return plantsReadyToHarvest;
+        }
 
-        for(GardenEntry entry : usersPlants){
-            int growthDuration = entry.getPlant().getGrowthDuration();
+        for(GardenEntry entry : plantsInUsersGarden){
+            int growthDuration = entry.getPlant().getGrowthDuration(); //growth-duration in weeks
             LocalDate createdAt = entry.getCreatedAt().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
             LocalDate currentDate = LocalDate.now();
-            if(growthDuration != 0 ) {
+            if(growthDuration != 0) {
                 if (growthDuration >= ChronoUnit.WEEKS.between(createdAt, currentDate)) {
-                    plantsReadyToHarvest.add(entry);
+                    plantsReadyToHarvest.add(entry.getPlant());
                 }
             }
 
-- 
GitLab