Skip to content

Commit

Permalink
FU-346 feat: 날짜별 스케줄 등록/수정 시 시간대 검증 추가
Browse files Browse the repository at this point in the history
시작시간이 종료시간과 같거나, 종료시간이 시작시간보다 더 앞인 경우 예외 발생
  • Loading branch information
rheeri committed Jan 7, 2025
1 parent c603c40 commit 495a5e8
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
public enum ScheduleErrorCode implements ErrorCode {
DAILY_SCHEDULE_NOT_FOUND(500, "해당하는 날짜별 스케줄을 찾을 수 없습니다."),
DAILY_SCHEDULE_OVERLAP(400, "해당 일정에 이미 등록된 스케줄이 있습니다."),
DAILY_SCHEDULE_IN_PAST(400, "현재 시점 이전의 스케줄은 등록할 수 없습니다.");
DAILY_SCHEDULE_IN_PAST(400, "현재 시점 이전의 스케줄은 등록할 수 없습니다."),
START_TIME_AFTER_END_TIME(400, "시작시간과 종료시간이 올바르지 않습니다.");

private final int httpStatus;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.time.Clock;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -37,6 +38,7 @@ public List<DailyScheduleResponse> getDailySchedules(Member photographer, DailyS
}

public DailyScheduleAddResponse addDailySchedule(Member photographer, DailyScheduleRequest request) {
validateTimeRange(request.getStartTime(), request.getEndTime());
validateScheduleInFuture(request);
validateScheduleOverlap(photographer, request);

Expand All @@ -53,6 +55,8 @@ public DailyScheduleAddResponse addDailySchedule(Member photographer, DailySched
}

public void updateDailySchedule(Member photographer, Long scheduleId, DailyScheduleRequest request) {
validateTimeRange(request.getStartTime(), request.getEndTime());

DailySchedule dailySchedule = dailyScheduleRepository.findByMemberAndId(photographer, scheduleId)
.orElseThrow(() -> new RestApiException(ScheduleErrorCode.DAILY_SCHEDULE_NOT_FOUND));

Expand All @@ -79,6 +83,20 @@ private void validateScheduleOverlap(Member member, DailyScheduleRequest request
}
}

private void validateTimeRange(LocalTime startTime, LocalTime endTime) {
if (startTime.isAfter(endTime) || startTime.equals(endTime)) {
throw new RestApiException(ScheduleErrorCode.START_TIME_AFTER_END_TIME);
}
}

private void validateScheduleInFuture(DailyScheduleRequest request) {
LocalDateTime requestDateTime = request.getDate().atTime(request.getStartTime());

if (requestDateTime.isBefore(LocalDateTime.now(clock))) {
throw new RestApiException(ScheduleErrorCode.DAILY_SCHEDULE_IN_PAST);
}
}

private void validateScheduleOverlap(Member member, DailyScheduleRequest request, Long scheduleId) {
List<DailySchedule> overlappingSchedules = dailyScheduleRepository.findOverlappingSchedules(member,
request.getDate(), request.getStartTime(), request.getEndTime());
Expand All @@ -91,14 +109,6 @@ private void validateScheduleOverlap(Member member, DailyScheduleRequest request
}
}

private void validateScheduleInFuture(DailyScheduleRequest request) {
LocalDateTime requestDateTime = request.getDate().atTime(request.getStartTime());

if (requestDateTime.isBefore(LocalDateTime.now(clock))) {
throw new RestApiException(ScheduleErrorCode.DAILY_SCHEDULE_IN_PAST);
}
}

private DailyScheduleResponse toDailyScheduleResponse(DailySchedule dailySchedule) {
return DailyScheduleResponse.builder()
.scheduleId(dailySchedule.getId())
Expand Down

0 comments on commit 495a5e8

Please sign in to comment.