diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b6be142eca1df3e42e1381c80349b2c040bf8a16
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,22 @@
+cache:
+  paths:
+    - .m2/
+
+stages:
+  - build
+  - test
+
+maven-build:
+  image: maven:3.8.5-openjdk-17
+  stage: build
+  script: "mvn clean package -DskipTests"
+  artifacts:
+    paths:
+      - target/
+
+maven-test:
+  image: maven:3.8.5-openjdk-17
+  stage: test
+  script: "mvn test"
+  dependencies:
+    - maven-build
diff --git a/src/main/java/hdm/mi/growbros/controllers/GardenController.java b/src/main/java/hdm/mi/growbros/controllers/GardenController.java
index 4f42d399be5fc2def5fae2badeec5a61baed9497..db636f8829ca4f979c92cbbc3a02ddee535c1e9e 100644
--- a/src/main/java/hdm/mi/growbros/controllers/GardenController.java
+++ b/src/main/java/hdm/mi/growbros/controllers/GardenController.java
@@ -60,14 +60,11 @@ public class GardenController {
     ) {
         return gardenService.clearGarden(user);
     }
-
-
-    @GetMapping ("/getPlantsNeedingWatering")
-    public ResponseEntity<String> getPlantsNeedingWatring (@AuthenticationPrincipal User user){
-        return ResponseEntity.ok(gardenService.notifyAboutPlantsNeedingWatering(user));
-    }
     @PostMapping("/setNewWateringFrequency")
     public void setNewWateringService(@RequestParam("wateringFrequency") int wateringFrequency , @RequestBody GardenEntry gardenEntry){
         gardenEntry.setWateringFrequency(wateringFrequency);
     }
+
+
+
 }
diff --git a/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java b/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java
index 9b692b8ae2646fdb2f5358f7140dbab58da1acd8..f1141a36efaccc5e02ab257d4377cd3f815216af 100644
--- a/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java
+++ b/src/main/java/hdm/mi/growbros/controllers/GrandmaController.java
@@ -1,13 +1,15 @@
 package hdm.mi.growbros.controllers;
 
 
+import hdm.mi.growbros.models.GardenEntry;
+import hdm.mi.growbros.models.plant.Plant;
 import hdm.mi.growbros.models.user.User;
 import hdm.mi.growbros.service.GrandmaService;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @RestController
 @RequestMapping("/api/v1/Grandma")
@@ -24,8 +26,17 @@ public class GrandmaController {
         return ResponseEntity.ok(grandmaService.growingTippDesTages(user));
     }
     @GetMapping ("/getGrowablePlants")
-    public ResponseEntity<String> getPlantsReadyToGrow(@AuthenticationPrincipal User user){
-            return ResponseEntity.ok(grandmaService.notifyAboutPlantsReadyToGrow(user));
+    public ResponseEntity<List<Plant>> getPlantsReadyToGrow(@AuthenticationPrincipal User user){
+            return ResponseEntity.ok(grandmaService.getPlantsReadyToGrow(user));
 
     }
+    @GetMapping ("/getPlantsNeedingWatering")
+    public ResponseEntity<List<GardenEntry>> getPlantsNeedingWatring (@AuthenticationPrincipal User user){
+        return ResponseEntity.ok(grandmaService.getGardenEntriesNeedingWatering(user));
+    }
+    @GetMapping("/getPlantsReadyToHarvest")
+    public ResponseEntity<List<GardenEntry>> getPlantsReadyToHarvest(@AuthenticationPrincipal User user){
+        List<GardenEntry> plantsReadyToHarvest = grandmaService.getPlantsReadyToHarvest(user);
+        return ResponseEntity.ok(plantsReadyToHarvest);
+    }
 }
diff --git a/src/main/java/hdm/mi/growbros/models/GardenEntry.java b/src/main/java/hdm/mi/growbros/models/GardenEntry.java
index dde6744331a505fc97f7e39be576a67f2ae7e558..5678e0d3923e66dd3640aff4ad016a1f9f74228f 100644
--- a/src/main/java/hdm/mi/growbros/models/GardenEntry.java
+++ b/src/main/java/hdm/mi/growbros/models/GardenEntry.java
@@ -4,9 +4,9 @@ import hdm.mi.growbros.models.plant.Plant;
 import hdm.mi.growbros.models.user.User;
 import jakarta.persistence.*;
 import lombok.AllArgsConstructor;
-import lombok.Getter;
+import lombok.Builder;
+import lombok.Data;
 import lombok.NoArgsConstructor;
-import lombok.Setter;
 import org.springframework.data.annotation.CreatedDate;
 import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
@@ -16,8 +16,8 @@ import java.util.Objects;
 
 @Entity
 @EntityListeners(AuditingEntityListener.class)
-@Getter
-@Setter
+@Data
+@Builder
 @AllArgsConstructor
 @NoArgsConstructor
 public class GardenEntry {
diff --git a/src/main/java/hdm/mi/growbros/service/GardenService.java b/src/main/java/hdm/mi/growbros/service/GardenService.java
index c9e3a1e5c4bfa76ecbfc9d9b8cf911b8db59ce39..b851da70f3cffbfc111733c0bbe35586567e3278 100644
--- a/src/main/java/hdm/mi/growbros/service/GardenService.java
+++ b/src/main/java/hdm/mi/growbros/service/GardenService.java
@@ -13,8 +13,6 @@ import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDate;
-import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
@@ -92,78 +90,7 @@ public class GardenService {
 
 
 
-    public List<GardenEntry> getGardenEntriesNeedingWatering(User user)  {
-        List<GardenEntry> plantsNeedingWatering = new ArrayList<>();
-        List<GardenEntry> plantsInUsersGarden = gardenRepository.findByUser(user);
-        if(plantsInUsersGarden.isEmpty()){
-            return plantsNeedingWatering;
-        }
-
-        for( int index = 1 ; index < plantsInUsersGarden.size();index++){
-            if(plantsInUsersGarden.get(index).getWateringFrequency() == 0  ){
-                switch (plantsInUsersGarden.get(index).getPlant().getWaterDemand()){
-                    case DRY -> {
-                        if(getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > 14) {
-                            plantsNeedingWatering.add(plantsInUsersGarden.get(index));
-                        }
-                    }
-                    case WET -> {
-                        if(getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > 7) {
-                            plantsNeedingWatering.add(plantsInUsersGarden.get(index));
-                        }
-                    }
-                    case VERY_WET -> {
-                        if(getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > 3) {
-                            plantsNeedingWatering.add(plantsInUsersGarden.get(index));
-                        }
-                    }
-                }
-            }else if (getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > plantsNeedingWatering.get(index).getWateringFrequency()){
-                plantsNeedingWatering.add(plantsInUsersGarden.get(index));
-            }
-        }
-
-        return plantsNeedingWatering;
 
-
-    }
-
-
-
-
-
-
-
-    public String notifyAboutPlantsNeedingWatering(User user)  {
-        List<GardenEntry> plantsNeedingWatering = getGardenEntriesNeedingWatering(user);
-        StringBuilder notification = new StringBuilder("Diese Pflanzen in deinem Garten brauchen Wasser");
-        if(!plantsNeedingWatering.isEmpty()){
-            int size = plantsNeedingWatering.size();
-            for (int i = 0; i < size; i++) {
-                notification.append(plantsNeedingWatering.get(i).getPlant().getName());
-                if (i < size - 2) {
-                    notification.append(", ");
-                } else if (i == size - 2) {
-                    notification.append(" und ");
-                }
-            }
-
-        }
-        return String.valueOf(notification);
-    }
-
-
-
-
-
-
-    private long getDaysSinceLastWatering(LocalDate lastWateringDate) {
-        if (lastWateringDate != null) {
-            LocalDate currentDate = LocalDate.now();
-            return ChronoUnit.DAYS.between(lastWateringDate, currentDate);
-        }
-        return 0;
-    }
 }
 
 
diff --git a/src/main/java/hdm/mi/growbros/service/GrandmaService.java b/src/main/java/hdm/mi/growbros/service/GrandmaService.java
index 7c0b8b4d500dced98537b0d4bcabec09ace2aedf..669833cf1ffbe33d5742a6ec580be878eeb1d587 100644
--- a/src/main/java/hdm/mi/growbros/service/GrandmaService.java
+++ b/src/main/java/hdm/mi/growbros/service/GrandmaService.java
@@ -1,20 +1,22 @@
 package hdm.mi.growbros.service;
 
+import hdm.mi.growbros.models.GardenEntry;
 import hdm.mi.growbros.models.WishListEntry;
 import hdm.mi.growbros.models.plant.Plant;
 import hdm.mi.growbros.models.user.User;
+import hdm.mi.growbros.repositories.GardenRepository;
 import hdm.mi.growbros.repositories.WishListRepository;
 import org.springframework.stereotype.Service;
+import lombok.RequiredArgsConstructor;
 
 import java.time.LocalDate;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
 import java.time.temporal.WeekFields;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Random;
+import java.util.*;
 
 @Service
-
+@RequiredArgsConstructor
 public class GrandmaService {
 
 
@@ -25,11 +27,9 @@ public class GrandmaService {
     private final GardenService gardenService;
 
 
-    public GrandmaService(WishListRepository wishListRepository , GardenService gardenService) {
+    private  final GardenRepository gardenRepository;
+
 
-        this.wishListRepository = wishListRepository;
-        this.gardenService = gardenService;
-    }
 
 
     public String growingTippDesTages(User user) {
@@ -42,26 +42,7 @@ public class GrandmaService {
     }
 
 
-    public String notifyAboutPlantsReadyToGrow(User user){
-            List<Plant> plantsReadyToGrow = getPlantsReadyToGrow(user);
-            if (plantsReadyToGrow.isEmpty()) {
-                return "";
-            }
-            StringBuilder notification = new StringBuilder("Diese Pflanzen in deiner Wunschliste wären bereit zum Einpflanzen: ");
-            int size = plantsReadyToGrow.size();
-            for (int i = 0; i < size; i++) {
-                notification.append(plantsReadyToGrow.get(i).getName());
-                if (i < size - 2) {
-                    notification.append(", ");
-                } else if (i == size - 2) {
-                    notification.append(" und ");
-                }
-            }
-            return notification.toString();
-        }
-
-
-    private List<Plant> getPlantsReadyToGrow( User user) {
+    public List<Plant> getPlantsReadyToGrow( User user) {
         LocalDate today = LocalDate.now();
 
         int weekNumber = today.get(WeekFields.of(Locale.getDefault()).weekOfWeekBasedYear());
@@ -78,4 +59,71 @@ public class GrandmaService {
 
         return plantsReadyToGrow;
     }
+
+    public List<GardenEntry> getGardenEntriesNeedingWatering(User user)  {
+        List<GardenEntry> plantsNeedingWatering = new ArrayList<>();
+        List<GardenEntry> plantsInUsersGarden = gardenRepository.findByUser(user);
+        if(plantsInUsersGarden.isEmpty()){
+            return plantsNeedingWatering;
+        }
+
+        for( int index = 1 ; index < plantsInUsersGarden.size();index++){
+            if(plantsInUsersGarden.get(index).getWateringFrequency() == 0  ){
+                switch (plantsInUsersGarden.get(index).getPlant().getWaterDemand()){
+                    case DRY -> {
+                        if(getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > 14) {
+                            plantsNeedingWatering.add(plantsInUsersGarden.get(index));
+                        }
+                    }
+                    case WET -> {
+                        if(getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > 7) {
+                            plantsNeedingWatering.add(plantsInUsersGarden.get(index));
+                        }
+                    }
+                    case VERY_WET -> {
+                        if(getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > 3) {
+                            plantsNeedingWatering.add(plantsInUsersGarden.get(index));
+                        }
+                    }
+                }
+            }else if (getDaysSinceLastWatering(plantsInUsersGarden.get(index).getTimeSinceLastWatering()) > plantsNeedingWatering.get(index).getWateringFrequency()){
+                plantsNeedingWatering.add(plantsInUsersGarden.get(index));
+            }
+        }
+
+        return plantsNeedingWatering;
+
+
+    }
+
+
+    private long getDaysSinceLastWatering(LocalDate lastWateringDate) {
+        if (lastWateringDate != null) {
+            LocalDate currentDate = LocalDate.now();
+            return ChronoUnit.DAYS.between(lastWateringDate, currentDate);
+        }
+        return 0;
+    }
+
+    public List<GardenEntry> getPlantsReadyToHarvest (User user){
+
+
+        List<GardenEntry> usersPlants = gardenRepository.findByUser(user);
+
+        List<GardenEntry> plantsReadyToHarvest = new ArrayList<>();
+
+        for(GardenEntry entry : usersPlants){
+            int growthDuration = entry.getPlant().getGrowthDuration();
+            LocalDate createdAt = entry.getCreatedAt().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+            LocalDate currentDate = LocalDate.now();
+            if(growthDuration != 0 ) {
+                if (growthDuration >= ChronoUnit.WEEKS.between(createdAt, currentDate)) {
+                    plantsReadyToHarvest.add(entry);
+                }
+            }
+
+        }
+        return plantsReadyToHarvest;
+
+    }
 }
diff --git a/src/test/java/hdm/mi/growbros/repositories/GardenRepositoryTest.java b/src/test/java/hdm/mi/growbros/repositories/GardenRepositoryTest.java
index 6aa97c9ff6e3a85017ae3880d45f037e5bd7a8ae..7873ad501cf4e1af2bcf684a6d563eff7d698a6a 100644
--- a/src/test/java/hdm/mi/growbros/repositories/GardenRepositoryTest.java
+++ b/src/test/java/hdm/mi/growbros/repositories/GardenRepositoryTest.java
@@ -70,10 +70,10 @@ class GardenRepositoryTest {
                 .harvestWeekEnd(30)
                 .build();
         entityManager.persist(p3);
-        ge1 = new GardenEntry(0L, p1, user1, null);
-        ge2 = new GardenEntry(0L, p2, user1, null);
-        ge3 = new GardenEntry(0L, p3, user1, null);
-        ge4 = new GardenEntry(0L, p3, user2, null);
+        ge1 = GardenEntry.builder().id(0L).plant(p1).user(user1).build();
+        ge2 = GardenEntry.builder().id(0L).plant(p2).user(user1).build();
+        ge3 = GardenEntry.builder().id(0L).plant(p3).user(user1).build();
+        ge4 = GardenEntry.builder().id(0L).plant(p3).user(user2).build();
         underTest.saveAll(List.of(ge1, ge2, ge3, ge4));
     }
 
diff --git a/src/test/java/hdm/mi/growbros/service/GardenServiceTest.java b/src/test/java/hdm/mi/growbros/service/GardenServiceTest.java
index b672464d13dfd5083c5f9ad318c46f44f17a476d..b61a4b092a847327a26f1db4831ae2cefc61c5f6 100644
--- a/src/test/java/hdm/mi/growbros/service/GardenServiceTest.java
+++ b/src/test/java/hdm/mi/growbros/service/GardenServiceTest.java
@@ -48,7 +48,7 @@ class GardenServiceTest {
         when(plantRepository.findById(1L)).thenReturn(Optional.of(plant));
         when(gardenRepository.save(
                 any(GardenEntry.class))
-        ).thenReturn(new GardenEntry(0L, plant, null, null));
+        ).thenReturn(GardenEntry.builder().plant(plant).build());
 
         //assert
         var result = gardenService.addPlantToGarden(1L, UserTestData.getUser1());
@@ -68,23 +68,23 @@ class GardenServiceTest {
 
         User user = UserTestData.getUser1();
 
-        when(gardenRepository.findByUser(user, Sort.by("createdDate"))).thenReturn(mapPlantsToGardenEntries(orderedByCreatedMock, user));
+        when(gardenRepository.findByUser(user, Sort.by("createdAt").descending())).thenReturn(mapPlantsToGardenEntries(orderedByCreatedMock, user));
         when(gardenRepository.findByUser(user, Sort.by("plant.name"))).thenReturn(mapPlantsToGardenEntries(orderedByNameMock, user));
         when(gardenRepository.findAllByNearestHarvestWeek(eq(user), any(int.class))).thenReturn(mapPlantsToGardenEntries(orderedByHarvestMock, user));
         when(gardenRepository.findAllByNearestPlantingWeek(eq(user), any(int.class))).thenReturn(mapPlantsToGardenEntries(orderedByPlantDateMock, user));
 
         assertAll(
-                () -> assertEquals(gardenService.getUserPlants(user, null), orderedByNameMock),
-                () -> assertEquals(gardenService.getUserPlants(user, "random stuff"), orderedByNameMock),
-                () -> assertEquals(gardenService.getUserPlants(user, "createdAt"), orderedByCreatedMock),
-                () -> assertEquals(gardenService.getUserPlants(user, "plantDate"), orderedByPlantDateMock),
-                () -> assertEquals(gardenService.getUserPlants(user, "harvestDate"), orderedByHarvestMock)
+                () -> assertEquals(orderedByNameMock, gardenService.getUserPlants(user, null)),
+                () -> assertEquals(orderedByNameMock, gardenService.getUserPlants(user, "random stuff")),
+                () -> assertEquals(orderedByCreatedMock, gardenService.getUserPlants(user, "createdAt")),
+                () -> assertEquals(orderedByPlantDateMock, gardenService.getUserPlants(user, "plantDate")),
+                () -> assertEquals(orderedByHarvestMock, gardenService.getUserPlants(user, "harvestDate"))
         );
     }
 
     private List<GardenEntry> mapPlantsToGardenEntries(List<Plant> plants, User user) {
         return plants.stream()
-                .map(plant -> new GardenEntry(0L, plant, user, null))
+                .map(plant -> GardenEntry.builder().plant(plant).id(0L).user(user).build())
                 .toList();
     }
 }
diff --git a/src/test/java/hdm/mi/growbros/service/PlantsServiceIntegrationTest.java b/src/test/java/hdm/mi/growbros/service/PlantsServiceIntegrationTest.java
index b67724a08b4a083c7c2eb8a9ee40ea874741a88d..8538b5828a894e0104f25afa35b79f1907a2a2d6 100644
--- a/src/test/java/hdm/mi/growbros/service/PlantsServiceIntegrationTest.java
+++ b/src/test/java/hdm/mi/growbros/service/PlantsServiceIntegrationTest.java
@@ -7,8 +7,14 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.test.context.ActiveProfiles;
 
+import java.util.List;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 @SpringBootTest
@@ -29,6 +35,9 @@ class PlantsServiceIntegrationTest {
 
     @Test
     void canUpdatePlant() {
+        Authentication authentication = new UsernamePasswordAuthenticationToken("admin", "password", List.of(new SimpleGrantedAuthority("ADMIN")));
+        SecurityContextHolder.getContext().setAuthentication(authentication);
+        System.out.println("set mock security context");
         String newName = "new name!";
         plantsService.updatePlant(plant.getId(), PlantUpdateRequest.builder().name(newName).build());
         assertEquals(newName, plantRepository.findById(plant.getId()).get().getName());