From ad4a006cd0f6d7306c1d3b5b9d7c28dd73b7ebee Mon Sep 17 00:00:00 2001
From: Hendrik Jungnitsch <hendrik.jungnitsch@gedoplan.de>
Date: Mo, 14 Nov 2022 11:41:51 +0100
Subject: [PATCH] exercise07

---
 src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/AlcFilter.java           |   14 ++++++++++++++
 src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/CocktailServiceImpl.java |    9 +++++++--
 src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/SugarFilter.java         |   16 ++++++++++++++++
 3 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/AlcFilter.java b/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/AlcFilter.java
new file mode 100644
index 0000000..53b1b6a
--- /dev/null
+++ b/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/AlcFilter.java
@@ -0,0 +1,14 @@
+package de.gedoplan.seminar.sbt.di.exercise.service;
+
+import de.gedoplan.seminar.sbt.di.exercise.domain.Cocktail;
+import org.springframework.stereotype.Component;
+
+import java.util.function.Predicate;
+
+@Component
+public class AlcFilter implements Predicate<Cocktail> {
+    @Override
+    public boolean test(Cocktail cocktail) {
+        return cocktail.isAlcoholic();
+    }
+}
diff --git a/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/CocktailServiceImpl.java b/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/CocktailServiceImpl.java
index 9e49f94..ff9a7e1 100644
--- a/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/CocktailServiceImpl.java
+++ b/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/CocktailServiceImpl.java
@@ -6,19 +6,24 @@
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.function.Predicate;
 
 @ConditionalOnProperty(name = "cocktailService.mock", havingValue = "false", matchIfMissing = true)
 @Component
 public class CocktailServiceImpl implements CocktailService {
 
     private final CocktailRepository cocktailRepository;
+    private final List<Predicate<Cocktail>> filters;
 
-    public CocktailServiceImpl(CocktailRepository cocktailRepository) {
+    public CocktailServiceImpl(CocktailRepository cocktailRepository, List<Predicate<Cocktail>> filters) {
         this.cocktailRepository = cocktailRepository;
+        this.filters = filters;
     }
 
     @Override
     public List<Cocktail> findAll() {
-        return cocktailRepository.findAll();
+        return cocktailRepository.findAll().stream()
+                .filter(filters.stream().reduce(Predicate::and).orElse(x -> true))
+                .toList();
     }
 }
diff --git a/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/SugarFilter.java b/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/SugarFilter.java
new file mode 100644
index 0000000..73f61be
--- /dev/null
+++ b/src/main/java/de/gedoplan/seminar/sbt/di/exercise/service/SugarFilter.java
@@ -0,0 +1,16 @@
+package de.gedoplan.seminar.sbt.di.exercise.service;
+
+import de.gedoplan.seminar.sbt.di.exercise.domain.Cocktail;
+import de.gedoplan.seminar.sbt.di.exercise.domain.CocktailSamples;
+import org.springframework.stereotype.Component;
+
+import java.util.function.Predicate;
+
+@Component
+public class SugarFilter implements Predicate<Cocktail> {
+
+    @Override
+    public boolean test(Cocktail cocktail) {
+        return !cocktail.getIngredients().containsKey(CocktailSamples.SUGAR);
+    }
+}

--
Gitblit v1.7.1