diff --git a/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/entities/Movie.java b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/entities/Movie.java new file mode 100644 index 0000000..fe19f52 --- /dev/null +++ b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/entities/Movie.java @@ -0,0 +1,29 @@ +package com.rogelioorts.training.spring.ddd.repositories.entities; + +import com.rogelioorts.training.spring.ddd.repositories.value.objects.CensoringLevel; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode(onlyExplicitlyIncluded = true) +public class Movie { + + @EqualsAndHashCode.Include + private String id; + + private String title; + + private String image; + + private String description; + + private String streamUrl; + + private double puntuation; + + private CensoringLevel censoringLevel; + +} diff --git a/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/factories/FiltersFactory.java b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/factories/FiltersFactory.java new file mode 100644 index 0000000..a4285e1 --- /dev/null +++ b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/factories/FiltersFactory.java @@ -0,0 +1,13 @@ +package com.rogelioorts.training.spring.ddd.repositories.factories; + +import com.rogelioorts.training.spring.ddd.repositories.value.objects.CensoringLevel; +import com.rogelioorts.training.spring.ddd.repositories.value.objects.Filter; +import com.rogelioorts.training.spring.ddd.repositories.value.objects.impl.CensoringFilter; + +public class FiltersFactory { + + public static Filter censoringFilter(CensoringLevel level) { + return new CensoringFilter(level); + } + +} diff --git a/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/CensoringLevel.java b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/CensoringLevel.java new file mode 100644 index 0000000..196c6b2 --- /dev/null +++ b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/CensoringLevel.java @@ -0,0 +1,5 @@ +package com.rogelioorts.training.spring.ddd.repositories.value.objects; + +public enum CensoringLevel { + +} diff --git a/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/Filter.java b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/Filter.java new file mode 100644 index 0000000..7828464 --- /dev/null +++ b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/Filter.java @@ -0,0 +1,11 @@ +package com.rogelioorts.training.spring.ddd.repositories.value.objects; + +import java.util.List; + +import com.rogelioorts.training.spring.ddd.repositories.entities.Movie; + +public interface Filter { + + List apply(List movies); + +} diff --git a/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/impl/CensoringFilter.java b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/impl/CensoringFilter.java new file mode 100644 index 0000000..d3b9f6b --- /dev/null +++ b/spring-ddd-domain/src/main/java/com/rogelioorts/training/spring/ddd/repositories/value/objects/impl/CensoringFilter.java @@ -0,0 +1,28 @@ +package com.rogelioorts.training.spring.ddd.repositories.value.objects.impl; + +import java.util.List; +import java.util.stream.Collectors; + +import com.rogelioorts.training.spring.ddd.repositories.entities.Movie; +import com.rogelioorts.training.spring.ddd.repositories.value.objects.CensoringLevel; +import com.rogelioorts.training.spring.ddd.repositories.value.objects.Filter; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode +@AllArgsConstructor +public class CensoringFilter implements Filter { + + private CensoringLevel level; + + @Override + public List apply(List movies) { + return movies.stream().filter(this::checkMovieFilter).collect(Collectors.toList()); + } + + private boolean checkMovieFilter(Movie movie) { + return level == null || level.equals(movie.getCensoringLevel()); + } + +}