From b3b45bd3fe7a46a9240fcdf6996d57206b53bc56 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 1 Feb 2026 22:53:22 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9B=A8=EC=9D=B4=ED=8C=85=20=EA=B0=9C?= =?UTF-8?q?=EC=88=98=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../waiting/controller/WaitingController.java | 22 +++++++++++++++++++ .../waiting/dto/GetWaitingSizeResponse.java | 11 ++++++++++ .../waiting/service/WaitingService.java | 19 ++++++++++++++++ .../repository/WaitingRedisRepository.java | 7 ++++++ 4 files changed, 59 insertions(+) create mode 100644 nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/dto/GetWaitingSizeResponse.java diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/controller/WaitingController.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/controller/WaitingController.java index 220e3025..e49dda65 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/controller/WaitingController.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/controller/WaitingController.java @@ -3,6 +3,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -11,6 +12,7 @@ import com.nowait.applicationuser.waiting.dto.CancelWaitingRequest; import com.nowait.applicationuser.waiting.dto.CancelWaitingResponse; +import com.nowait.applicationuser.waiting.dto.GetWaitingSizeResponse; import com.nowait.applicationuser.waiting.dto.RegisterWaitingRequest; import com.nowait.applicationuser.waiting.dto.RegisterWaitingResponse; import com.nowait.applicationuser.waiting.service.WaitingService; @@ -77,4 +79,24 @@ public ResponseEntity cancelWaiting( ) ); } + + @GetMapping("/{publicCode}/waiting-count") + @Operation(summary = "대기열 리팩토링용 API", description = "대기 인원수 조회") + public ResponseEntity getWaitingCount( + @AuthenticationPrincipal CustomOAuth2User customOAuth2User, + @PathVariable String publicCode + ) { + GetWaitingSizeResponse response = waitingService.getWaitingCount( + customOAuth2User, + publicCode + ); + + return ResponseEntity + .ok() + .body( + ApiUtils.success( + response + ) + ); + } } diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/dto/GetWaitingSizeResponse.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/dto/GetWaitingSizeResponse.java new file mode 100644 index 00000000..85a0f93a --- /dev/null +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/waiting/dto/GetWaitingSizeResponse.java @@ -0,0 +1,11 @@ +package com.nowait.applicationuser.waiting.dto; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class GetWaitingSizeResponse { + private Long storeId; + private Long waitingCount; +} 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..931cdaa2 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 @@ -10,6 +10,7 @@ import com.nowait.applicationuser.waiting.dto.CancelWaitingRequest; import com.nowait.applicationuser.waiting.dto.CancelWaitingResponse; +import com.nowait.applicationuser.waiting.dto.GetWaitingSizeResponse; import com.nowait.applicationuser.waiting.dto.RegisterWaitingRequest; import com.nowait.applicationuser.waiting.dto.RegisterWaitingResponse; import com.nowait.applicationuser.waiting.dto.WaitingIdempotencyValue; @@ -146,6 +147,24 @@ public CancelWaitingResponse cancelWaiting(CustomOAuth2User oAuth2User, String p .build(); } + public GetWaitingSizeResponse getWaitingCount(CustomOAuth2User oAuth2User, String publicCode) { + + Store store = storeRepository.findByPublicCodeAndDeletedFalse(publicCode) + .orElseThrow(StoreNotFoundException::new); + + User user = userRepository.findById(oAuth2User.getUserId()) + .orElseThrow(UserNotFoundException::new); + + Long storeId = store.getStoreId(); + + Long waitingCount = waitingRedisRepository.getWaitingCount(storeId); + + return GetWaitingSizeResponse.builder() + .storeId(storeId) + .waitingCount(waitingCount) + .build(); + } + private String generateWaitingNumber(Long storeId, LocalDateTime timestamp) { // 1) 키 접두사 - 날짜 String today = timestamp.format(DateTimeFormatter.BASIC_ISO_DATE); // YYYYMMDD diff --git a/nowait-domain/domain-redis/src/main/java/com/nowait/domaincoreredis/reservation/repository/WaitingRedisRepository.java b/nowait-domain/domain-redis/src/main/java/com/nowait/domaincoreredis/reservation/repository/WaitingRedisRepository.java index e11964f5..f5f69441 100644 --- a/nowait-domain/domain-redis/src/main/java/com/nowait/domaincoreredis/reservation/repository/WaitingRedisRepository.java +++ b/nowait-domain/domain-redis/src/main/java/com/nowait/domaincoreredis/reservation/repository/WaitingRedisRepository.java @@ -209,6 +209,13 @@ public Long getWaitingRank(Long storeId, Long userId) { return redisTemplate.opsForZSet().rank(queueKey, String.valueOf(userId)); } + public Long getWaitingCount(Long storeId) { + String queueKey = RedisKeyUtils.buildWaitingKeyPrefix() + storeId; + Long size = redisTemplate.opsForZSet().zCard(queueKey); + + return size != null ? size : 0L; + } + // 웨이팅 여부 조회 // TODO: 구현 필요 public Boolean isWaiting(Long storeId, Long userId) {