diff --git a/src/main/java/leets/weeth/domain/attendance/presentation/AttendanceAdminController.java b/src/main/java/leets/weeth/domain/attendance/presentation/AttendanceAdminController.java index ac65dc5a..a1d5251e 100644 --- a/src/main/java/leets/weeth/domain/attendance/presentation/AttendanceAdminController.java +++ b/src/main/java/leets/weeth/domain/attendance/presentation/AttendanceAdminController.java @@ -34,8 +34,8 @@ public CommonResponse close(@RequestParam LocalDate now, @RequestParam Int @GetMapping("/meetings") @Operation(summary = "정기모임 조회") - public CommonResponse> getMeetings(@RequestParam(required = false) Integer cardinal) { - List response = meetingUseCase.find(cardinal); + public CommonResponse getMeetings(@RequestParam(required = false) Integer cardinal) { + MeetingDTO.Infos response = meetingUseCase.find(cardinal); return CommonResponse.createSuccess(MEETING_FIND_SUCCESS.getMessage(), response); } diff --git a/src/main/java/leets/weeth/domain/schedule/application/dto/MeetingDTO.java b/src/main/java/leets/weeth/domain/schedule/application/dto/MeetingDTO.java index 63009f67..1a36c992 100644 --- a/src/main/java/leets/weeth/domain/schedule/application/dto/MeetingDTO.java +++ b/src/main/java/leets/weeth/domain/schedule/application/dto/MeetingDTO.java @@ -4,6 +4,7 @@ import leets.weeth.domain.schedule.domain.entity.enums.Type; import java.time.LocalDateTime; +import java.util.List; public class MeetingDTO { @@ -31,4 +32,10 @@ public record Info( LocalDateTime start ) {} + public record Infos( + Info thisWeek, + List meetings + ) {} + + } diff --git a/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCase.java b/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCase.java index fdfa693f..316208db 100644 --- a/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCase.java +++ b/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCase.java @@ -1,5 +1,6 @@ package leets.weeth.domain.schedule.application.usecase; +import leets.weeth.domain.schedule.application.dto.MeetingDTO; import leets.weeth.domain.schedule.application.dto.ScheduleDTO; import java.util.List; @@ -11,7 +12,7 @@ public interface MeetingUseCase { Response find(Long userId, Long eventId); - List find(Integer cardinal); + MeetingDTO.Infos find(Integer cardinal); void save(ScheduleDTO.Save dto, Long userId); diff --git a/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCaseImpl.java b/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCaseImpl.java index 8889a49b..9b95fd11 100644 --- a/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCaseImpl.java +++ b/src/main/java/leets/weeth/domain/schedule/application/usecase/MeetingUseCaseImpl.java @@ -7,6 +7,7 @@ import leets.weeth.domain.attendance.domain.service.AttendanceGetService; import leets.weeth.domain.attendance.domain.service.AttendanceSaveService; import leets.weeth.domain.attendance.domain.service.AttendanceUpdateService; +import leets.weeth.domain.schedule.application.dto.MeetingDTO; import leets.weeth.domain.schedule.application.dto.ScheduleDTO; import leets.weeth.domain.schedule.application.mapper.MeetingMapper; import leets.weeth.domain.schedule.domain.entity.Meeting; @@ -24,6 +25,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.Comparator; import java.util.List; import static leets.weeth.domain.schedule.application.dto.MeetingDTO.Info; @@ -62,20 +67,21 @@ public Response find(Long userId, Long meetingId) { } @Override - public List find(Integer cardinal) { + public MeetingDTO.Infos find(Integer cardinal) { List meetings; if (cardinal == null) { meetings = meetingGetService.findAll(); - } else { meetings = meetingGetService.findMeetingByCardinal(cardinal); - } - return meetings.stream() - .map(mapper::toInfo) - .toList(); + Meeting thisWeek = findThisWeek(meetings); + List sorted = sortMeetings(meetings); + + return new MeetingDTO.Infos( + thisWeek != null ? mapper.toInfo(thisWeek) : null, + sorted.stream().map(mapper::toInfo).toList()); } @Override @@ -114,4 +120,26 @@ public void delete(Long meetingId) { attendanceDeleteService.deleteAll(meeting); meetingDeleteService.delete(meeting); } + + private List sortMeetings(List meetings) { + return meetings.stream() + .sorted(Comparator.comparing(Meeting::getStart).reversed()) + .toList(); + } + + + private Meeting findThisWeek(List meetings) { + LocalDate today = LocalDate.now(); + LocalDate startOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDate endOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + + return meetings.stream() + .filter(m -> { + LocalDate d = m.getStart().toLocalDate(); + return !d.isBefore(startOfWeek) && !d.isAfter(endOfWeek); + }) + .findFirst() + .orElse(null); + } + }