diff --git a/growbros-frontend/src/components/Grandma.tsx b/growbros-frontend/src/components/Grandma.tsx index 00b8ee40229988c6b9206e0f301dcefb8503368e..87f4a4f58cd47dd7605825921ee6d93a5b0460e6 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 be9a045428682963b9db1bd5692f20d243ae2516..77483675b1140e3bfda75bcfee39b56b895d4b81 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 2d4bf07776ef401809bb8942e9012c1fec8c2377..e8d817683fa65672b87c4c521040db5b4391c330 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 e90d77e711709610a8132c5de9b50a39eaacbb7f..01e4217093cd98b46344653400b133b9407216bd 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 2b1ec5c98f97094ea67174931de7422dc0b801d6..5b7fc8982c40bb9105bd633072160796bd039e1b 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()); } }