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 e1165c13..8a822b69 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; @@ -147,6 +148,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) {