Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package back.activitymanager.dto.activity;

import java.time.LocalDateTime;
import lombok.Data;

@Data
Expand All @@ -9,5 +8,5 @@ public class ActivitySearchDto {
private String forWho;
private String category;
private String format;
private LocalDateTime dateTime;
private String dateTime;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -124,31 +129,52 @@ public Page<ActivityDto> 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) {
throw new LocalNotFoundException("Local is not found: " + 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<ActivityDto> searchActivity(ActivitySearchDto activitySearchDto) {

Specification<Activity> spec = Specification
.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<Activity> all = activityRepository.findAll(spec)
.stream()
.filter(a -> searchActivityHelper(a.getLat(),
a.getLng(), activitySearchDto.getLocal()))
.toList();
List<Activity> 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();
}

}