From 7a6910f0c263102efd4e40e64e36af0f43156961 Mon Sep 17 00:00:00 2001 From: Paul Huerkamp <35733278+PAException@users.noreply.github.com> Date: Mon, 27 Nov 2023 22:11:35 +0100 Subject: [PATCH] Hotfix substitutes --- .../reserved/SubstituteController.java | 15 +++++++++++++-- .../repository/SubstituteRepository.java | 17 ++++++++--------- .../api/endpoint/dto/SubstituteDTO.java | 2 +- .../notification/NotificationService.java | 2 +- 4 files changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/github/paexception/engelsburg/api/controller/reserved/SubstituteController.java b/src/main/java/io/github/paexception/engelsburg/api/controller/reserved/SubstituteController.java index c01837e..a7cdc40 100644 --- a/src/main/java/io/github/paexception/engelsburg/api/controller/reserved/SubstituteController.java +++ b/src/main/java/io/github/paexception/engelsburg/api/controller/reserved/SubstituteController.java @@ -15,10 +15,13 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; + import java.sql.Date; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; import static io.github.paexception.engelsburg.api.util.Constants.Substitute.NAME_KEY; @@ -37,7 +40,7 @@ public class SubstituteController { /** * Create a {@link SubstituteModel} out of a {@link SubstituteDTO}. * - * @param dto with information + * @param dto with information * @return created substitute model */ private static SubstituteModel createSubstitute(SubstituteDTO dto) { @@ -77,7 +80,7 @@ public void updateSubstitutes(List fetchedDTOs, Date date) { //Check if substitutes have been updated or newly created List updated = new ArrayList<>(), created = new ArrayList<>(); List toSave = new ArrayList<>(); - for (SubstituteDTO dto: fetchedDTOs) { + for (SubstituteDTO dto : fetchedDTOs) { if (current.stream().anyMatch(substituteDTO -> substituteDTO.sameBase(dto))) { if (!current.contains(dto)) updated.add(dto); } else created.add(dto); @@ -113,9 +116,17 @@ public Result getSubstitutes(String classNameFilter, List substitutes = new ArrayList<>(); if (teacher.isEmpty() && classes.isEmpty()) { substitutes = this.substituteRepository.findAllByDateGreaterThanEqual(date); + } else { + substitutes = this.substituteRepository.findAllByDateGreaterThanEqualAndClassNameIsNull(date); } + if (!classes.isEmpty()) { substitutes.addAll(this.substituteRepository.findAllByDateGreaterThanEqualAndClassNameIn(date, classes)); + + substitutes.addAll( + classes.stream().filter(className -> className.length() >= 3 && !(Character.isDigit(className.charAt(1)) && className.length() == 3)).map( + className -> this.substituteRepository.findAllByDateGreaterThanEqualAndClassNameVariations(date, className) + ).flatMap(Collection::stream).collect(Collectors.toList())); } if (!teacher.isEmpty()) { substitutes.addAll( diff --git a/src/main/java/io/github/paexception/engelsburg/api/database/repository/SubstituteRepository.java b/src/main/java/io/github/paexception/engelsburg/api/database/repository/SubstituteRepository.java index 946d39f..62decdc 100644 --- a/src/main/java/io/github/paexception/engelsburg/api/database/repository/SubstituteRepository.java +++ b/src/main/java/io/github/paexception/engelsburg/api/database/repository/SubstituteRepository.java @@ -7,9 +7,9 @@ import io.github.paexception.engelsburg.api.database.model.SubstituteModel; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; + import java.sql.Date; import java.util.List; -import java.util.Optional; @Repository public interface SubstituteRepository extends JpaRepository { @@ -19,6 +19,7 @@ public interface SubstituteRepository extends JpaRepository 9%c% * 10c --> 10%c% * should not be used vor E1 - Q4 + * * @param className to convert * @return parsed parameter */ @@ -29,17 +30,15 @@ static String likeClassName(String className) { List findAllByDate(Date date); - Optional findByDateAndLessonAndTeacher(Date date, int lesson, String teacher); - - default Optional findByDateAndLessonAndClassNameLike(Date date, int lesson, String className) { - return this.findByDateAndLessonAndClassNameIsLike(date, lesson, likeClassName(className)); - } + List findAllByDateGreaterThanEqual(Date date); - Optional findByDateAndLessonAndClassNameIsLike(Date date, int lesson, String className); + List findAllByDateGreaterThanEqualAndClassNameIsNull(Date date); - Optional findByDateAndLessonAndSubject(Date date, int lesson, String subject); + default List findAllByDateGreaterThanEqualAndClassNameVariations(Date date, String className) { + return this.findByDateGreaterThanEqualAndClassNameIsLike(date, likeClassName(className)); + } - List findAllByDateGreaterThanEqual(Date date); + List findByDateGreaterThanEqualAndClassNameIsLike(Date date, String className); List findAllByDateGreaterThanEqualAndClassNameIn(Date date, List classes); diff --git a/src/main/java/io/github/paexception/engelsburg/api/endpoint/dto/SubstituteDTO.java b/src/main/java/io/github/paexception/engelsburg/api/endpoint/dto/SubstituteDTO.java index f9beaff..58bd84e 100644 --- a/src/main/java/io/github/paexception/engelsburg/api/endpoint/dto/SubstituteDTO.java +++ b/src/main/java/io/github/paexception/engelsburg/api/endpoint/dto/SubstituteDTO.java @@ -48,7 +48,7 @@ public boolean sameBase(SubstituteDTO dto) { if (lesson != dto.lesson) return false; if (!Objects.equals(className, dto.className)) return false; - if (!Character.isDigit(className.charAt(0))) { //Only for E1 - Q4 + if (className != null && !Character.isDigit(className.charAt(0))) { //Only for E1 - Q4 return Objects.equals(teacher, dto.teacher); } diff --git a/src/main/java/io/github/paexception/engelsburg/api/service/notification/NotificationService.java b/src/main/java/io/github/paexception/engelsburg/api/service/notification/NotificationService.java index 6a19ea9..e3de7e9 100644 --- a/src/main/java/io/github/paexception/engelsburg/api/service/notification/NotificationService.java +++ b/src/main/java/io/github/paexception/engelsburg/api/service/notification/NotificationService.java @@ -129,7 +129,7 @@ private static String getSubstituteTitle(SubstituteNotificationDTO substitute, b } else if (DateUtils.isSameDay(substitute.getDate(), Date.from(Instant.now().plus(Duration.ofDays(1))))) { relationalDay = "morgen"; } else { - relationalDay = "den " + DateTimeFormatter.ofPattern("dd.MM.").format(substitute.getDate().toInstant()); + relationalDay = "den " + DateTimeFormatter.ofPattern("dd.MM.").format(substitute.getDate().toLocalDate()); } return actuality + " Vertretung für " + relationalDay;