25/04/28
내용
가게운영 시간 외에는 주문을 할수 없도록 현재 시각과 openTime 과 closeTime을 넣고 현재 시간과 비교를 하는 것으로 넣었는데 여기서 문제가 생김
Store store = storeRepository.findStoreByIdOrElseThrow(storeId);
LocalTime now = LocalTime.now(); // 현재 시각 (시간, 분까지만)
LocalTime openTime = store.getOpenTime(); // 가게 오픈 시간
LocalTime closeTime = store.getCloseTime(); // 가게 마감 시간
if (now.isBefore(openTime) || now.isAfter(closeTime)) {
throw new RuntimeException("지금은 주문하실 수 없습니다. (운영시간: " + openTime + " ~ " + closeTime + ")");
openTime
과 closeTime
으로 현재 시각과 비교Store store = storeRepository.findStoreByIdOrElseThrow(storeId);
LocalTime now = LocalTime.now(); // 현재 시각 (시간, 분까지만)
LocalTime openTime = store.getOpenTime(); // 가게 오픈 시간
LocalTime closeTime = store.getCloseTime(); // 가게 마감 시간
boolean isOpen;
if (store.getDeletedAt() != null) {
throw new CustomException(ErrorCode.STORE_NOT_FOUND);
}
if (openTime.isBefore(closeTime)) {
isOpen = !now.isBefore(openTime) && !now.isAfter(closeTime);
} else {
isOpen = !now.isBefore(openTime) || !now.isAfter(closeTime);
}
if (!isOpen) {
throw new RuntimeException("지금은 주문하실 수 없습니다. (운영시간: " + openTime + " ~ " + closeTime + ")");
}
기존에는 사이의 시간만 확인을 할 수 있었지만 지금의 코드
openTime이 closeTime보다 이전이면 (예: 아침 9시 ~ 저녁 10시처럼)
→ 하루 안의 영업시간입니다.
openTime이 closeTime보다 나중인 경우 (ex: 20:00 ~ 03:00, 밤 넘어가는 경우)
→ 날짜를 넘어가는 영업시간
true 로 해주고
isOpen이 false이면 주문 불가 예외를 발생시키며 운영시간 안내 메시지를 보여줍니다.
이번 문제를 통해 운영 시간이 자정을 넘어가는 경우(예: 23:00~03:00)에는 단순히 openTime과 closeTime을 비교하는 로직으로는 정확한 판단이 어렵다는 것을 알게 되었고 날짜를 넘기는 영업 시간에 맞게 openTime과 closeTime을 비교하는 처리를 추가하여 문제를 해결할 수 있었다.
앞으로는 시간대가 자정을 넘어가는 특수한 상황까지 고려하여 로직을 설계하는 것이 중요하다는 점을 얻었다.