From 27ab28831a38f9dbf38b7004d9bcfc72f462176e Mon Sep 17 00:00:00 2001 From: jeonghyemin Date: Sat, 26 Jul 2025 14:26:32 +0900 Subject: [PATCH] =?UTF-8?q?feat(Reservation):=EC=98=88=EC=95=BD=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ReservationController.java | 2 +- .../service/ReservationService.java | 27 ++++++++++++++----- .../repository/ReservationRepository.java | 5 +++- 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/controller/ReservationController.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/controller/ReservationController.java index 8e134c97..f6d91d36 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/controller/ReservationController.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/controller/ReservationController.java @@ -36,7 +36,7 @@ public class ReservationController { @GetMapping("/admin/{storeId}/waiting/users") @Operation(summary = "주점별 전체 대기/호출중 리스트 조회", description = "주점에 대한 대기 리스트 조회(WAITING,CALLING)") @ApiResponse(responseCode = "200", description = "주점별 전체 대기 리스트 조회") - public ResponseEntity> getWaitingUsersWithScore(@PathVariable Long storeId) { + public ResponseEntity getWaitingUsersWithScore(@PathVariable Long storeId) { List response = reservationService.getAllWaitingUserDetails(storeId); return ResponseEntity.ok(response); } diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java index 1b887b28..e0177ccf 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java @@ -6,6 +6,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ThreadLocalRandom; import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; @@ -90,6 +92,7 @@ public CallGetResponseDto updateReservationStatus(Long reservationId, Reservatio @Transactional(readOnly = true) public List getAllWaitingUserDetails(Long storeId) { List> waitingList = waitingRedisRepository.getAllWaitingWithScore(storeId); + System.out.println(waitingList); return waitingList.stream() .map(tuple -> { @@ -100,18 +103,24 @@ public List getAllWaitingUserDetails(Long storeId) { String status = waitingRedisRepository.getWaitingStatus(storeId, userId); // 2. DB에서 userName, createdAt, reservationId 조회 - String userName = null; - LocalDateTime createdAt = null; - Long reservationId = null; - - Optional reservationOpt = reservationRepository.findByStore_StoreIdAndUserId(storeId, Long.valueOf(userId)); + //TODO 개선필요 -> createAt 정확성 및 reservationhId 생성 방법(예약생성부터 DB에 박아야하나....) + String userName = userRepository.getReferenceById(Long.valueOf(userId)).getNickname(); + LocalDateTime createdAt = LocalDateTime.now(); + String reservationId = String.valueOf( + ThreadLocalRandom.current().nextInt(1, 100)); + + Optional reservationOpt = reservationRepository.findByStore_StoreIdAndUserIdAndRequestedAtBetween( + storeId, Long.valueOf(userId), LocalDate.now().atStartOfDay(), LocalDate.now().atTime(LocalTime.MAX)); if (reservationOpt.isPresent()) { Reservation reservation = reservationOpt.get(); createdAt = reservation.getRequestedAt(); - reservationId = reservation.getId(); + reservationId = reservation.getId().toString(); userName = reservation.getUser().getNickname(); + } else { } + + return new WaitingUserResponse( reservationId != null ? reservationId.toString() : null, userId, @@ -129,7 +138,11 @@ public List getAllWaitingUserDetails(Long storeId) { // 완료 or 취소 처리된 대기 리스트 조회 @Transactional(readOnly = true) public List getCompletedWaitingUserDetails(Long storeId) { - List reservations = reservationRepository.findAllByStore_StoreId(storeId); + List reservations = reservationRepository.findAllByStore_StoreIdAndStatusInAndRequestedAtBetween( + storeId, + List.of(ReservationStatus.CONFIRMED, ReservationStatus.CANCELLED), + LocalDate.now().atStartOfDay(), + LocalDate.now().atTime(LocalTime.MAX)); return reservations.stream() .map(r -> WaitingUserResponse.fromEntity(r)) diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/repository/ReservationRepository.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/repository/ReservationRepository.java index b3f167af..96c7639f 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/repository/ReservationRepository.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/repository/ReservationRepository.java @@ -19,8 +19,11 @@ public interface ReservationRepository extends JpaRepository Optional findByStore_StoreIdAndUserId(Long storeId, Long userId); - Optional findByStore_StoreIdAndUserIdAndRequestedAtBetween(Long storeId, Long userId, LocalDateTime start, LocalDateTime end); + Optional findByStore_StoreIdAndUserIdAndRequestedAtBetween( + Long storeId, Long userId, LocalDateTime start, LocalDateTime end); + List findAllByStore_StoreIdAndStatusInAndRequestedAtBetween( + Long storeId, List statuses, LocalDateTime start, LocalDateTime end); Optional findByStore_StoreIdAndUserIdAndStatusInAndRequestedAtBetween( Long storeId, Long userId,