diff --git a/src/main/java/back/activitymanager/dto/activity/ActivitySearchDto.java b/src/main/java/back/activitymanager/dto/activity/ActivitySearchDto.java index 0114d0a..0c497ec 100644 --- a/src/main/java/back/activitymanager/dto/activity/ActivitySearchDto.java +++ b/src/main/java/back/activitymanager/dto/activity/ActivitySearchDto.java @@ -1,6 +1,5 @@ package back.activitymanager.dto.activity; -import java.time.LocalDateTime; import lombok.Data; @Data @@ -9,5 +8,5 @@ public class ActivitySearchDto { private String forWho; private String category; private String format; - private LocalDateTime dateTime; + private String dateTime; } diff --git a/src/main/java/back/activitymanager/service/impl/ActivityServiceImpl.java b/src/main/java/back/activitymanager/service/impl/ActivityServiceImpl.java index 3e59ac1..40b2cfd 100644 --- a/src/main/java/back/activitymanager/service/impl/ActivityServiceImpl.java +++ b/src/main/java/back/activitymanager/service/impl/ActivityServiceImpl.java @@ -14,6 +14,10 @@ import back.activitymanager.repository.ActivitySpecification; import back.activitymanager.repository.UserRepository; import back.activitymanager.service.ActivityService; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.MonthDay; +import java.time.format.DateTimeFormatter; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -26,6 +30,7 @@ @RequiredArgsConstructor public class ActivityServiceImpl implements ActivityService { + public static final String TOMORROW = "Завтра"; private final ActivityRepository activityRepository; private final ActivityMapper activityMapper; private final UserRepository userRepository; @@ -124,8 +129,7 @@ public Page getMeParticipating(Pageable pageable, .map(activityMapper::toDto); } - private static boolean searchActivityHelper(double lat, double lng, String local) - throws LocalNotFoundException { + private static boolean searchActivityHelper(double lat, double lng, String local) { try { return LocalAdaptorApi.isEtLocal(lat, lng, local); } catch (Exception e) { @@ -133,6 +137,23 @@ private static boolean searchActivityHelper(double lat, double lng, String local } } + private static LocalDateTime mapToLocalDateTime(String dateStr) { + + if (dateStr == null) { + return null; + } + + if (TOMORROW.equals(dateStr)) { + return LocalDateTime.now().plusDays(1L); + } + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d.MM"); + MonthDay monthDay = MonthDay.parse(dateStr, formatter); + LocalDate date = monthDay.atYear(LocalDate.now().getYear()); + + return date.atStartOfDay(); + } + @Override public List searchActivity(ActivitySearchDto activitySearchDto) { @@ -140,15 +161,20 @@ public List searchActivity(ActivitySearchDto activitySearchDto) { .where(ActivitySpecification.hasForWho(activitySearchDto.getForWho())) .and(ActivitySpecification.hasCategory(activitySearchDto.getCategory())) .and(ActivitySpecification.hasFormat(activitySearchDto.getFormat())) - .and(ActivitySpecification.afterDate(activitySearchDto.getDateTime())); + .and(ActivitySpecification.afterDate(mapToLocalDateTime( + activitySearchDto.getDateTime()))); - List all = activityRepository.findAll(spec) - .stream() - .filter(a -> searchActivityHelper(a.getLat(), - a.getLng(), activitySearchDto.getLocal())) - .toList(); + List result = activityRepository.findAll(spec); + + if (activitySearchDto.getLocal() != null) { + return result.stream() + .filter(a -> searchActivityHelper(a.getLat(), + a.getLng(), activitySearchDto.getLocal())) + .map(activityMapper::toDto) + .toList(); + } - return all.stream().map(activityMapper::toDto).toList(); + return result.stream().map(activityMapper::toDto).toList(); } }