-
Notifications
You must be signed in to change notification settings - Fork 0
refactor(Store): 입장 시간 처리 updatedAt으로 통일 #183
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
Caution Review failedThe pull request is closed. """ Walkthrough여러 DTO, Entity, Service 클래스에서 예약 상태 변경과 관련된 타임스탬프 필드( Changes
Sequence Diagram(s)sequenceDiagram
participant AdminAPI
participant ReservationService
participant Reservation(Entity)
participant Redis
participant DB
AdminAPI->>ReservationService: updateReservationStatus(reservationId, requestDto, memberDetails)
ReservationService->>Reservation(Entity): markUpdated(now, newStatus)
ReservationService->>DB: Save Reservation
ReservationService->>AdminAPI: 반환 (EntryStatusResponseDto with updatedAt)
sequenceDiagram
participant UserAPI
participant ReservationService
participant WaitingUserRedisRepository
participant StoreRepository
participant Reservation(Entity)
participant DB
UserAPI->>ReservationService: cancelWaiting(storeId, user)
ReservationService->>WaitingUserRedisRepository: 대기 정보 조회 (예약번호, 인원, 대기시각)
alt 예약번호 없음
ReservationService-->>UserAPI: 예외 발생
else 예약번호 있음
ReservationService->>WaitingUserRedisRepository: removeWaiting(...)
ReservationService->>StoreRepository: findById(storeId)
ReservationService->>Reservation(Entity): 예약 엔티티 생성 및 markUpdated(now, CANCELLED)
ReservationService->>DB: 저장
ReservationService-->>UserAPI: true/false 반환
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~18 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (3)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/reservation/service/ReservationService.java (1)
117-128: 중복된 유효성 검사 로직
reservationNumber이 null인지 확인하여 예외를 던진 후,removeWaiting결과를 다시 확인하는 것은 중복된 검증입니다. 이미 예약 정보가 존재함을 확인했으므로removeWaiting은 항상 true를 반환할 것으로 예상됩니다.String reservationNumber = waitingUserRedisRepository.getReservationId(storeId, userId); if (reservationNumber == null) { throw new IllegalArgumentException("Waiting not found"); } Integer partySize = waitingUserRedisRepository.getPartySize(storeId, userId); Long ts = waitingUserRedisRepository.getWaitingTimestamp(storeId, userId); // 대기열에서 제거 및 결과 반환 -boolean removed = waitingUserRedisRepository.removeWaiting(storeId, userId); -if (!removed) { - throw new IllegalArgumentException("Waiting not found"); -} +waitingUserRedisRepository.removeWaiting(storeId, userId);nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java (2)
268-279: 중복된 updatedAt 설정
Reservation빌더에서updatedAt을 설정한 후(274번 줄),markUpdated메서드를 호출하여(278번 줄) 다시 설정하고 있습니다.Reservation r = Reservation.builder() .reservationNumber(reservationNumber) .store(storeRepository.getReferenceById(storeId)) .user(userRepository.getReferenceById(Long.valueOf(userId))) .partySize(partySize) .requestedAt(requestedAt) - .updatedAt(LocalDateTime.now()) + .status(ReservationStatus.CONFIRMED) + .updatedAt(LocalDateTime.now()) .build(); -// 호출 시각 반영 -r.markUpdated(LocalDateTime.now(), ReservationStatus.CONFIRMED); Reservation saved = reservationRepository.save(r);
307-317: 중복된 updatedAt 설정CONFIRMED 처리와 동일하게, 빌더에서
updatedAt을 설정한 후markUpdated를 다시 호출하는 중복이 있습니다.Reservation r = Reservation.builder() .reservationNumber(reservationNumber) .store(storeRepository.getReferenceById(storeId)) .user(userRepository.getReferenceById(Long.valueOf(userId))) .partySize(partySize) .requestedAt(requestedAt) - .updatedAt(LocalDateTime.now()) + .status(ReservationStatus.CANCELLED) + .updatedAt(LocalDateTime.now()) .build(); - -r.markUpdated(LocalDateTime.now(), ReservationStatus.CANCELLED); Reservation saved = reservationRepository.save(r);
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/dto/EntryStatusResponseDto.java(2 hunks)nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java(5 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/reservation/repository/WaitingUserRedisRepository.java(3 hunks)nowait-app-user-api/src/main/java/com/nowait/applicationuser/reservation/service/ReservationService.java(1 hunks)nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/entity/Reservation.java(2 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (3)
nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/entity/Reservation.java (3)
nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/dto/ReservationGetResponseDto.java (1)
ReservationGetResponseDto(11-44)nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/repository/ReservationRepository.java (1)
ReservationRepository(14-23)nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/controller/ReservationController.java (1)
updateEntry(69-85)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/reservation/service/ReservationService.java (1)
nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/repository/WaitingRedisRepository.java (2)
deleteWaiting(57-66)WaitingRedisRepository(16-67)
nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/dto/EntryStatusResponseDto.java (3)
nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/dto/ReservationGetResponseDto.java (2)
ReservationGetResponseDto(11-44)fromEntity(34-43)nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/dto/CallGetResponseDto.java (2)
CallGetResponseDto(11-43)fromEntity(33-42)nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/dto/CallingWaitingResponseDto.java (1)
CallingWaitingResponseDto(10-35)
🔇 Additional comments (4)
nowait-app-user-api/src/main/java/com/nowait/applicationuser/reservation/service/ReservationService.java (1)
130-143: 취소된 예약 정보 저장 구현 확인예약 취소 시 데이터베이스에 기록을 남기는 구현이 적절하게 추가되었습니다.
updatedAt필드를 사용한 타임스탬프 통합 방식도 PR 목적에 부합합니다.nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/dto/EntryStatusResponseDto.java (1)
34-35: 타임스탬프 필드 통합 확인여러 개의 타임스탬프 필드(
calledAt,confirmedAt,cancelledAt)를 하나의updatedAt필드로 통합한 변경사항이 적절히 반영되었습니다.Also applies to: 52-52
nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/reservation/entity/Reservation.java (1)
52-65: 엔티티 리팩토링 승인여러 상태별 타임스탬프 필드를 하나의
updatedAt필드로 통합하고, 상태 업데이트 메서드를markUpdated로 일원화한 설계가 깔끔합니다. 이는 코드 복잡도를 줄이고 유지보수성을 향상시킵니다.nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/service/ReservationService.java (1)
246-247: 잘못된 지적:setWaitingCalledAt메서드는 이미 정의되어 있어 컴파일 오류가 발생하지 않습니다.
- 경로: nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/reservation/repository/WaitingRedisRepository.java
- 메서드 시그니처:
public void setWaitingCalledAt(Long storeId, String userId, long timestamp) { String key = RedisKeyUtils.buildWaitingCalledAtKeyPrefix() + storeId; redisTemplate.opsForHash().put(key, userId, String.valueOf(timestamp)); }따라서 해당 코드는 정상 동작하며, 이전 지적은 무시하셔도 됩니다.
Likely an incorrect or invalid review comment.
작업 요약
Issue Link
#174
문제점 및 어려움
해결 방안
Reference
Summary by CodeRabbit
버그 수정
리팩터링