From ab380105eaede37bf9bdf00c0cc2ccbdead69aaa Mon Sep 17 00:00:00 2001
From: Hannah Holzheu <hh062@hdm-stuttgart.de>
Date: Tue, 12 Dec 2023 11:51:18 +0100
Subject: [PATCH] added page Handling for getRandomPlants Endpoint #19

---
 .../mi/growbros/service/PlantsService.java    | 28 ++++++-------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/src/main/java/hdm/mi/growbros/service/PlantsService.java b/src/main/java/hdm/mi/growbros/service/PlantsService.java
index 3702a2b..41ac6c7 100644
--- a/src/main/java/hdm/mi/growbros/service/PlantsService.java
+++ b/src/main/java/hdm/mi/growbros/service/PlantsService.java
@@ -13,10 +13,7 @@ import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Random;
+import java.util.*;
 
 @Service
 @RequiredArgsConstructor
@@ -37,23 +34,16 @@ public class PlantsService {
     }
 
     public Collection<Plant> getRandomPlants(int numberOfPlants) {
-        List<Plant> allPlants = plantRepository.findAll();
+        numberOfPlants= Math.min(MAX_PAGE_SIZE, numberOfPlants);
+        long plantCount= plantRepository.count();
+        int lastPage= (int)(plantCount/numberOfPlants)-1;
+        int randomPage= (int) (Math.random()*lastPage);
 
-        if (allPlants.size() <= numberOfPlants) {
-            return allPlants;
-        } else {
-            List<Plant> randomPlants = new ArrayList<>();
-            Random random = new Random();
+        CustomPageDto<Plant> randomPlantPage= getPlants(randomPage, numberOfPlants);
+        List<Plant> allPlantsOfPage = new ArrayList<>(randomPlantPage.content());
+        Collections.shuffle(allPlantsOfPage);
 
-            while (randomPlants.size() < numberOfPlants) {
-                Plant randomPlant = allPlants.get(random.nextInt(allPlants.size()));
-
-                if (!randomPlants.contains(randomPlant)) {
-                    randomPlants.add(randomPlant);
-                }
-            }
-            return randomPlants;
-        }
+        return allPlantsOfPage;
     }
 
     public Collection<Plant> getPlantsSearchedFor(SearchRequest searchRequest) {
-- 
GitLab