From 82fc30e5dca7d3c74c0a75186908b6b4190fd3a9 Mon Sep 17 00:00:00 2001 From: YuYeonho Date: Mon, 3 Feb 2025 19:20:49 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=88=98=EC=A0=95=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KeunSoriServerApplication.java | 2 + .../controller/AdminMemberController.java | 2 +- .../MemberApplicantResponse.java | 2 +- .../member/service/AdminMemberService.java | 2 +- .../AdminReservationController.java | 28 ++++----- .../reservation/domain/DailySchedule.java | 12 ++-- .../reservation/domain/WeeklySchedule.java | 14 ++++- ...> DailyScheduleUpdateOrCreateRequest.java} | 2 +- .../dto/request/WeeklyScheduleRequest.java | 14 ----- .../request/WeeklyScheduleUpdateRequest.java | 26 +++++++++ .../dto/response/DailyAvailableResponse.java | 29 ++++++++++ .../dto/response/MonthlyScheduleResponse.java | 2 +- .../dto/response/WeeklyScheduleResponse.java | 4 +- .../repository/WeeklyScheduleRepository.java | 7 +-- .../service/AdminReservationService.java | 45 +++++++-------- .../service/ReservationService.java | 57 ++++++------------- 16 files changed, 140 insertions(+), 108 deletions(-) rename src/main/java/com/keunsori/keunsoriserver/domain/admin/member/dto/{ => response}/MemberApplicantResponse.java (90%) rename src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/{DailyScheduleRequest.java => DailyScheduleUpdateOrCreateRequest.java} (90%) delete mode 100644 src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleRequest.java create mode 100644 src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleUpdateRequest.java diff --git a/src/main/java/com/keunsori/keunsoriserver/KeunSoriServerApplication.java b/src/main/java/com/keunsori/keunsoriserver/KeunSoriServerApplication.java index 22a872d..5dfd222 100644 --- a/src/main/java/com/keunsori/keunsoriserver/KeunSoriServerApplication.java +++ b/src/main/java/com/keunsori/keunsoriserver/KeunSoriServerApplication.java @@ -4,6 +4,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import java.time.DayOfWeek; + @EnableJpaAuditing @SpringBootApplication public class KeunSoriServerApplication { diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/controller/AdminMemberController.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/controller/AdminMemberController.java index 610bc54..eec235b 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/controller/AdminMemberController.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/controller/AdminMemberController.java @@ -1,6 +1,6 @@ package com.keunsori.keunsoriserver.domain.admin.member.controller; -import com.keunsori.keunsoriserver.domain.admin.member.dto.MemberApplicantResponse; +import com.keunsori.keunsoriserver.domain.admin.member.dto.response.MemberApplicantResponse; import com.keunsori.keunsoriserver.domain.admin.member.service.AdminMemberService; import com.keunsori.keunsoriserver.domain.member.dto.response.MemberResponse; import com.keunsori.keunsoriserver.domain.member.service.MemberService; diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/dto/MemberApplicantResponse.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/dto/response/MemberApplicantResponse.java similarity index 90% rename from src/main/java/com/keunsori/keunsoriserver/domain/admin/member/dto/MemberApplicantResponse.java rename to src/main/java/com/keunsori/keunsoriserver/domain/admin/member/dto/response/MemberApplicantResponse.java index 9bea3f1..7a4498b 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/dto/MemberApplicantResponse.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/dto/response/MemberApplicantResponse.java @@ -1,4 +1,4 @@ -package com.keunsori.keunsoriserver.domain.admin.member.dto; +package com.keunsori.keunsoriserver.domain.admin.member.dto.response; import com.keunsori.keunsoriserver.domain.member.domain.vo.MemberStatus; import com.keunsori.keunsoriserver.domain.member.domain.Member; diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/service/AdminMemberService.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/service/AdminMemberService.java index 906cfaa..e6b34aa 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/service/AdminMemberService.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/member/service/AdminMemberService.java @@ -1,6 +1,6 @@ package com.keunsori.keunsoriserver.domain.admin.member.service; -import com.keunsori.keunsoriserver.domain.admin.member.dto.MemberApplicantResponse; +import com.keunsori.keunsoriserver.domain.admin.member.dto.response.MemberApplicantResponse; import com.keunsori.keunsoriserver.domain.member.domain.Member; import com.keunsori.keunsoriserver.domain.member.domain.vo.MemberStatus; import com.keunsori.keunsoriserver.domain.member.dto.response.MemberResponse; diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/controller/AdminReservationController.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/controller/AdminReservationController.java index e096cfe..da59d10 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/controller/AdminReservationController.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/controller/AdminReservationController.java @@ -1,8 +1,8 @@ package com.keunsori.keunsoriserver.domain.admin.reservation.controller; -import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleRequest; -import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleRequest; -import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.DailyAvailableResponse; +import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleUpdateOrCreateRequest; +import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleUpdateRequest; +import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.MonthlyScheduleResponse; import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.WeeklyScheduleResponse; import com.keunsori.keunsoriserver.domain.admin.reservation.service.AdminReservationService; import com.keunsori.keunsoriserver.domain.reservation.service.ReservationService; @@ -28,23 +28,23 @@ public ResponseEntity> findAllWeeklySchedules(){ } // 주간 테이블 설정 - @PostMapping("/weekly-schedule") - public ResponseEntity saveWeeklySchedule(@RequestBody List requests){ - adminReservationService.saveWeeklySchedule(requests); + @PutMapping("/weekly-schedule") + public ResponseEntity saveWeeklySchedule(@RequestBody List requests){ + adminReservationService.saveOrUpdateWeeklySchedule(requests); return ResponseEntity.ok().build(); } - //일자별 관리 페이지 반환 - @GetMapping("daily-schedule") - public ResponseEntity> findAllDailySchedulesAndResrvations(@RequestParam("month") String month) { - List responses = reservationService.findDailyAvailableByMonth(month); - return ResponseEntity.ok().body(responses); + // 일자별 관리 페이지 반환 + @GetMapping("/daily-schedule") + public ResponseEntity findAllDailySchedulesAndResrvations(@RequestParam("month") String month) { + MonthlyScheduleResponse response = reservationService.findMonthlySchedule(month); + return ResponseEntity.ok().body(response); } // 일간 시간 설정 - @PostMapping("daily-schedule") - public ResponseEntity saveDailySchedule(@RequestBody DailyScheduleRequest request){ - adminReservationService.saveDailySchedule(request); + @PostMapping("/daily-schedule") + public ResponseEntity saveDailySchedule(@RequestBody DailyScheduleUpdateOrCreateRequest request){ + adminReservationService.saveOrUpdateDailySchedule(request); return ResponseEntity.ok().build(); } diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/DailySchedule.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/DailySchedule.java index 0fe1557..dbf7c3b 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/DailySchedule.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/DailySchedule.java @@ -4,15 +4,14 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import lombok.Getter; -import lombok.NoArgsConstructor; +import lombok.*; import java.time.LocalDate; import java.time.LocalTime; @Entity @Getter -@NoArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) public class DailySchedule { @Id @@ -24,10 +23,15 @@ public class DailySchedule { private LocalTime endTime; - public DailySchedule(LocalDate date, boolean isActive, LocalTime startTime, LocalTime endTime){ + @Builder + private DailySchedule(LocalDate date, boolean isActive, LocalTime startTime, LocalTime endTime){ this.date = date; this.isActive = isActive; this.startTime = startTime; this.endTime = endTime; } + + public boolean isPastDate(){ + return date.isBefore(LocalDate.now()); + } } diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/WeeklySchedule.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/WeeklySchedule.java index d966dd3..f11ff3e 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/WeeklySchedule.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/domain/WeeklySchedule.java @@ -2,24 +2,32 @@ import jakarta.persistence.*; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import java.time.DayOfWeek; import java.time.LocalTime; @Entity @Getter -@AllArgsConstructor @NoArgsConstructor public class WeeklySchedule { @Id - @Column(nullable = false, unique = true) - private String dayOfWeek; + private DayOfWeek dayOfWeek; private boolean isActive; private LocalTime startTime; private LocalTime endTime; + + @Builder + private WeeklySchedule(DayOfWeek dayOfWeek, boolean isActive, LocalTime startTime, LocalTime endTime){ + this.dayOfWeek = dayOfWeek; + this.isActive = isActive; + this.startTime = startTime; + this.endTime = endTime; + } } diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/DailyScheduleRequest.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/DailyScheduleUpdateOrCreateRequest.java similarity index 90% rename from src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/DailyScheduleRequest.java rename to src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/DailyScheduleUpdateOrCreateRequest.java index abc8505..5dd7c91 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/DailyScheduleRequest.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/DailyScheduleUpdateOrCreateRequest.java @@ -5,7 +5,7 @@ import java.time.LocalDate; import java.time.LocalTime; -public record DailyScheduleRequest( +public record DailyScheduleUpdateOrCreateRequest( @Schema(example = "2025-01-01", type = "string") LocalDate date, boolean isActive, diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleRequest.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleRequest.java deleted file mode 100644 index ba33910..0000000 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleRequest.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.keunsori.keunsoriserver.domain.admin.reservation.dto.request; - -import io.swagger.v3.oas.annotations.media.Schema; - -import java.time.LocalTime; - -public record WeeklyScheduleRequest( - String dayOfWeek, - boolean isActive, - @Schema(example = "10:00", type = "string") - LocalTime startTime, - @Schema(example = "22:00", type = "string") - LocalTime endTime -) {} diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleUpdateRequest.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleUpdateRequest.java new file mode 100644 index 0000000..18bd030 --- /dev/null +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/request/WeeklyScheduleUpdateRequest.java @@ -0,0 +1,26 @@ +package com.keunsori.keunsoriserver.domain.admin.reservation.dto.request; + +import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.time.DayOfWeek; +import java.time.LocalTime; + +public record WeeklyScheduleUpdateRequest( + int dayOfWeekNum, // 0 = 일요일, 1 = 월요일, ... + boolean isActive, + @Schema(example = "10:00", type = "string") + LocalTime startTime, + @Schema(example = "22:00", type = "string") + LocalTime endTime +) { + public WeeklySchedule toEntity(){ + return WeeklySchedule.builder() + .dayOfWeek(DayOfWeek.of((dayOfWeekNum+1)%8)) + .isActive(isActive) + .startTime(startTime) + .endTime(endTime) + .build(); + } +} + diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/DailyAvailableResponse.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/DailyAvailableResponse.java index 7dec8f8..4dfcf1e 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/DailyAvailableResponse.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/DailyAvailableResponse.java @@ -1,5 +1,8 @@ package com.keunsori.keunsoriserver.domain.admin.reservation.dto.response; +import com.keunsori.keunsoriserver.domain.admin.reservation.domain.DailySchedule; +import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule; + import java.time.LocalDate; import java.time.LocalTime; @@ -9,4 +12,30 @@ public record DailyAvailableResponse( LocalTime startTime, LocalTime endTime ) { + public static DailyAvailableResponse from(DailySchedule dailySchedule){ + return new DailyAvailableResponse( + dailySchedule.getDate(), + dailySchedule.isActive(), + dailySchedule.getStartTime(), + dailySchedule.getEndTime() + ); + } + + public static DailyAvailableResponse of(LocalDate date, WeeklySchedule weeklySchedule){ + return new DailyAvailableResponse( + date, + weeklySchedule.isActive(), + weeklySchedule.getStartTime(), + weeklySchedule.getEndTime() + ); + } + + public static DailyAvailableResponse createInactiveDate(LocalDate date){ + return new DailyAvailableResponse( + date, + false, + null, + null + ); + } } diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/MonthlyScheduleResponse.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/MonthlyScheduleResponse.java index b29bdda..721513f 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/MonthlyScheduleResponse.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/MonthlyScheduleResponse.java @@ -5,7 +5,7 @@ import java.util.List; public record MonthlyScheduleResponse( - List dailyAvailableRespons, + List dailyAvailableResponses, List reservationResponses ) { } diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/WeeklyScheduleResponse.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/WeeklyScheduleResponse.java index 4e8eb8c..5551c8a 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/WeeklyScheduleResponse.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/dto/response/WeeklyScheduleResponse.java @@ -5,14 +5,14 @@ import java.time.LocalTime; public record WeeklyScheduleResponse( - String dayOfWeek, + int dayOfWeekNum, // 0 = 일요일, 1 = 월요일, ... boolean isActive, LocalTime startTime, LocalTime endTime ) { public static WeeklyScheduleResponse from(WeeklySchedule weeklySchedule){ return new WeeklyScheduleResponse( - weeklySchedule.getDayOfWeek(), + weeklySchedule.getDayOfWeek().getValue()%7, weeklySchedule.isActive(), weeklySchedule.getStartTime(), weeklySchedule.getEndTime() diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/repository/WeeklyScheduleRepository.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/repository/WeeklyScheduleRepository.java index 01f91d9..ca61bfa 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/repository/WeeklyScheduleRepository.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/repository/WeeklyScheduleRepository.java @@ -3,11 +3,10 @@ import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule; import org.springframework.data.jpa.repository.JpaRepository; +import java.time.DayOfWeek; import java.util.Optional; -public interface WeeklyScheduleRepository extends JpaRepository { +public interface WeeklyScheduleRepository extends JpaRepository { - Optional findByDayOfWeek(String dayOfWeek); - - void deleteById(String dayOfWeek); + Optional findByDayOfWeek(DayOfWeek dayOfWeek); } diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/service/AdminReservationService.java b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/service/AdminReservationService.java index fa87ba6..4297775 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/service/AdminReservationService.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/admin/reservation/service/AdminReservationService.java @@ -1,9 +1,8 @@ package com.keunsori.keunsoriserver.domain.admin.reservation.service; import com.keunsori.keunsoriserver.domain.admin.reservation.domain.DailySchedule; -import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule; -import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleRequest; -import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleRequest; +import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleUpdateOrCreateRequest; +import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleUpdateRequest; import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.WeeklyScheduleResponse; import com.keunsori.keunsoriserver.domain.admin.reservation.repository.DailyScheduleRepository; import com.keunsori.keunsoriserver.domain.admin.reservation.repository.WeeklyScheduleRepository; @@ -15,9 +14,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; import java.time.LocalTime; -import java.util.ArrayList; import java.util.List; import static com.keunsori.keunsoriserver.global.exception.ErrorMessage.*; @@ -39,10 +36,12 @@ public List findAllWeeklySchedules() { } @Transactional - public void saveWeeklySchedule(List requests) { - List weeklyScheduleList = new ArrayList<>(); + public void saveOrUpdateWeeklySchedule(List requests) { + requests.stream() + .map(WeeklyScheduleUpdateRequest::toEntity) + .forEach(weeklyScheduleRepository::save); - for(WeeklyScheduleRequest request : requests){ + /*for(WeeklyScheduleRequest request : requests){ if(request.isActive()){ // 활성화된 요일 저장 WeeklySchedule weeklySchedule = new WeeklySchedule( @@ -56,27 +55,27 @@ public void saveWeeklySchedule(List requests) { weeklyScheduleList.add(weeklySchedule); } else { // 비활성화된 요일 삭제 - weeklyScheduleRepository.deleteById(request.dayOfWeek()); + weeklyScheduleRepository.deleteByDayOfWeek(request.dayOfWeek()); } } // 데이터베이스에 저장 - weeklyScheduleRepository.saveAll(weeklyScheduleList); + weeklyScheduleRepository.saveAll(weeklyScheduleList);*/ } @Transactional - public void saveDailySchedule(DailyScheduleRequest request) { - DailySchedule dailySchedule = new DailySchedule( - request.date(), - request.isActive(), - request.startTime(), - request.endTime() - ); + public void saveOrUpdateDailySchedule(DailyScheduleUpdateOrCreateRequest request) { + DailySchedule dailySchedule = DailySchedule.builder() + .date(request.date()) + .isActive(request.isActive()) + .startTime(request.startTime()) + .endTime(request.endTime()) + .build(); - validateNotPastDateSchdule(dailySchedule); - validateSchelduleTime(dailySchedule.getStartTime(),dailySchedule.getEndTime()); + validateNotPastDateSchedule(dailySchedule); + validateScheduleTime(dailySchedule.getStartTime(),dailySchedule.getEndTime()); // active -> unactive 시 예약들 삭제 - if(dailySchedule.isActive() == false){ + if(!dailySchedule.isActive()){ reservationRepository.deleteAllByDate(dailySchedule.getDate()); } @@ -94,13 +93,13 @@ public void deleteReservationByAdmin(Long reservationId) { reservationRepository.delete(reservation); } - private void validateNotPastDateSchdule(DailySchedule schedule){ - if(schedule.getDate().isBefore(LocalDate.now())) { + private void validateNotPastDateSchedule(DailySchedule schedule){ + if(schedule.isPastDate()) { throw new ReservationException(INVALID_DATE_SCHEDULE); } } - private void validateSchelduleTime(LocalTime startTime, LocalTime endTime) { + private void validateScheduleTime(LocalTime startTime, LocalTime endTime) { if (!endTime.isAfter(startTime)) { throw new ReservationException(INVALID_SCHEDULE_TIME); } diff --git a/src/main/java/com/keunsori/keunsoriserver/domain/reservation/service/ReservationService.java b/src/main/java/com/keunsori/keunsoriserver/domain/reservation/service/ReservationService.java index c87f09f..e262387 100644 --- a/src/main/java/com/keunsori/keunsoriserver/domain/reservation/service/ReservationService.java +++ b/src/main/java/com/keunsori/keunsoriserver/domain/reservation/service/ReservationService.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Stream; import lombok.RequiredArgsConstructor; @@ -95,53 +96,31 @@ public List findAllMyReservations() { } public MonthlyScheduleResponse findMonthlySchedule(String yearMonth) { - List dailyAvailableRespons = findDailyAvailableByMonth(yearMonth); + List dailyAvailableResponses = findDailyAvailableByMonth(yearMonth); List reservationResponses = findReservationsByMonth(yearMonth); - return new MonthlyScheduleResponse(dailyAvailableRespons, reservationResponses); + return new MonthlyScheduleResponse(dailyAvailableResponses, reservationResponses); } - public List findDailyAvailableByMonth(String yearMonth) { + private List findDailyAvailableByMonth(String yearMonth) { List responses = new ArrayList<>(); LocalDate start = DateUtil.parseMonthToFirstDate(yearMonth); LocalDate end = start.plusMonths(1); - for(LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) { - Optional dailyScheduleOpt = dailyScheduleRepository.findByDate(date); - - // 일간 설정 있으면 반환 - if(dailyScheduleOpt.isPresent()) { - DailySchedule dailySchedule = dailyScheduleOpt.get(); - responses.add(new DailyAvailableResponse( - date, - dailySchedule.isActive(), - dailySchedule.getStartTime(), - dailySchedule.getEndTime() - )); - } else { - String dayOfWeek = date.getDayOfWeek().toString(); - Optional weeklyScheduleOpt = weeklyScheduleRepository.findByDayOfWeek(dayOfWeek); - - // 일간 설정이 없으면 주간 설정 적용 - if(weeklyScheduleOpt.isPresent()) { - WeeklySchedule weeklySchedule = weeklyScheduleOpt.get(); - responses.add(new DailyAvailableResponse( - date, - weeklySchedule.isActive(), - weeklySchedule.getStartTime(), - weeklySchedule.getEndTime() - )); - } else { - // 주간 설정도 없으면 사용하지 않는 날 - responses.add(new DailyAvailableResponse( - date, - false, - null, - null - )); - } - } - } + Stream.iterate(start, date -> date.isBefore(end), date -> date.plusDays(1)) + .forEach( + date -> dailyScheduleRepository.findByDate(date) + .ifPresentOrElse( + dailySchedule -> responses.add(DailyAvailableResponse.from(dailySchedule)), + () -> { + weeklyScheduleRepository.findByDayOfWeek(date.getDayOfWeek()).ifPresentOrElse( + weeklySchedule -> responses.add(DailyAvailableResponse.of(date, weeklySchedule)), + () -> responses.add(DailyAvailableResponse.createInactiveDate(date)) + ); + } + ) + ); + return responses; } }