diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/exception/GlobalExceptionHandler.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/exception/GlobalExceptionHandler.java index 67fef84d..de20f1f3 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/exception/GlobalExceptionHandler.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/exception/GlobalExceptionHandler.java @@ -229,7 +229,7 @@ public ErrorResponse duplicateReservationException(DuplicateReservationException public ErrorResponse alreadyWaitingException(AlreadyDeletedWaitingException e, WebRequest request) { alarm(e, request); log.error("alreadyWaitingException", e); - return new ErrorResponse(e.getMessage(), DUPLICATE_RESERVATION.getCode()); + return new ErrorResponse(e.getMessage(), ALREADY_DELETED_RESERVATION.getCode()); } @ResponseStatus(BAD_REQUEST) diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/service/WaitingService.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/service/WaitingService.java index e94f024d..e1165c13 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/service/WaitingService.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/service/WaitingService.java @@ -54,6 +54,15 @@ public class WaitingService { @Transactional public RegisterWaitingResponse registerWaiting(CustomOAuth2User oAuth2User, String publicCode, RegisterWaitingRequest waitingRequest, HttpServletRequest httpServletRequest) { + String idempotentKey = httpServletRequest.getHeader("Idempotency-Key"); + + // TODO 멱등성 검증 로직 점검 필요 + Optional existingIdempotencyValue = waitingIdempotencyRepository.findByKey(idempotentKey); + if (existingIdempotencyValue.isPresent()) { + log.info("Existing idempotency key found: {}", idempotentKey); + return existingIdempotencyValue.get().getResponse(); + } + // TODO 유저 및 주점 존재 검증은 공통으로 많이 쓰이니 AOP로 빼는게 좋을 듯 Store store = storeRepository.findByPublicCodeAndDeletedFalse(publicCode) .orElseThrow(StoreNotFoundException::new); @@ -65,18 +74,10 @@ public RegisterWaitingResponse registerWaiting(CustomOAuth2User oAuth2User, Stri Long storeId = store.getStoreId(); LocalDateTime timestamp = LocalDateTime.now(); String waitingNumber = generateWaitingNumber(storeId, timestamp); - String idempotentKey = httpServletRequest.getHeader("Idempotency-Key"); // 멱등키 검증 - 이미 동일한 멱등키로 등록된 웨이팅이 있는지 확인 // waitingRedisRepository.idempotentKeyKeyExists(idempotentKey, ReservationStatus.WAITING.name()); - // TODO 멱등성 검증 로직 점검 필요 - Optional existingIdempotencyValue = waitingIdempotencyRepository.findByKey(idempotentKey); - if (existingIdempotencyValue.isPresent()) { - log.info("Existing idempotency key found: {}", idempotentKey); - return existingIdempotencyValue.get().getResponse(); - } - // 일일 가능 웨이팅 최대 개수 초과 검증 // TODO race condition 발생 가능성 점검 필요