-
Notifications
You must be signed in to change notification settings - Fork 2
feat: 도어용 유저 티켓 유효성 검증 API - #162 #163
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
📝 WalkthroughSummary by CodeRabbit릴리스 노트
Walkthrough도어에서 사용자 티켓 유효성을 검증하기 위한 새로운 API 엔드포인트를 추가. 기존 스태프 티켓 확인 메서드를 리네이밍하고, 새로운 검증 로직 및 DTO를 도입. 공개 API 엔드포인트로 보안 화이트리스트에 등록. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
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: 0
🧹 Nitpick comments (1)
src/main/java/com/permitseoul/permitserver/domain/ticket/api/service/TicketService.java (1)
133-150: 중복 코드 리팩토링 고려새로운 검증 메서드가 잘 구현되었으나,
confirmTicketByStaff메서드와 예외 처리 로직이 매우 유사합니다 (lines 124-130과 143-149).공통 예외 처리 로직을 별도 메서드로 추출하는 것을 고려해 보세요. 예를 들어:
private <T> T executeWithTicketExceptionHandling(Supplier<T> operation) { try { return operation.get(); } catch (TicketNotFoundException e) { throw new NotFoundTicketException(ErrorCode.NOT_FOUND_TICKET); } catch (TicketTypeNotfoundException e) { throw new NotFoundTicketException(ErrorCode.NOT_FOUND_TICKET_TYPE); } catch (EventNotfoundException e) { throw new NotFoundTicketException(ErrorCode.NOT_FOUND_EVENT); } }다만 현재 구조도 충분히 이해하기 쉬우므로, 이는 선택적 개선사항입니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
src/main/java/com/permitseoul/permitserver/domain/ticket/api/controller/TicketController.java(1 hunks)src/main/java/com/permitseoul/permitserver/domain/ticket/api/dto/res/DoorValidateUserTicket.java(1 hunks)src/main/java/com/permitseoul/permitserver/domain/ticket/api/service/TicketService.java(3 hunks)src/main/java/com/permitseoul/permitserver/domain/ticket/core/component/TicketRetriever.java(1 hunks)src/main/java/com/permitseoul/permitserver/global/config/SecurityConfig.java(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
src/main/java/com/permitseoul/permitserver/domain/ticket/core/component/TicketRetriever.java (1)
src/main/java/com/permitseoul/permitserver/domain/ticket/core/exception/TicketNotFoundException.java (1)
TicketNotFoundException(3-4)
src/main/java/com/permitseoul/permitserver/domain/ticket/api/controller/TicketController.java (1)
src/main/java/com/permitseoul/permitserver/global/response/ApiResponseUtil.java (1)
ApiResponseUtil(7-29)
🔇 Additional comments (7)
src/main/java/com/permitseoul/permitserver/domain/ticket/core/component/TicketRetriever.java (1)
53-56: LGTM!기존
findTicketEntityByTicketCode를 보완하는 도메인 레벨 조회 메서드가 잘 추가되었습니다. 트랜잭션 설정과 예외 처리도 적절합니다.src/main/java/com/permitseoul/permitserver/domain/ticket/api/dto/res/DoorValidateUserTicket.java (1)
7-22: LGTM!DTO 설계가 적절합니다. Record 사용과 정적 팩토리 메서드 패턴이 잘 적용되었으며, 날짜 포맷팅도 일관성 있게 처리되었습니다.
src/main/java/com/permitseoul/permitserver/domain/ticket/api/controller/TicketController.java (2)
39-46: LGTM!메서드명 변경(
confirmUserTicketByStaffAtDoor)으로 의도가 더 명확해졌고, 서비스 메서드 호출도 적절하게 업데이트되었습니다.
48-54: 체크 코드 검증 누락 확인 필요새로운 검증 엔드포인트가 티켓 상태와 날짜만 확인하고 체크 코드는 검증하지 않습니다. 이는 스태프 확인 엔드포인트(
confirmUserTicketByStaffAtDoor)와 차이가 있습니다.검증 단계에서는 체크 코드 없이 티켓 유효성만 확인하고, 실제 사용 시에만 체크 코드를 검증하는 것이 의도된 설계인지 확인해 주세요.
src/main/java/com/permitseoul/permitserver/domain/ticket/api/service/TicketService.java (2)
114-131: LGTM!메서드명 변경과 헬퍼 메서드 활용으로 코드가 더 명확해졌습니다. 트랜잭션 경계와 예외 처리도 적절합니다.
152-164: LGTM!헬퍼 메서드들이 코드 중복을 효과적으로 제거하고 가독성을 향상시켰습니다. 특히
findTicketTypeAndVerifyTicketDate는 날짜 검증 로직을 재사용 가능하게 만들었습니다.src/main/java/com/permitseoul/permitserver/global/config/SecurityConfig.java (1)
40-41: 티켓 코드 생성 로직 검증 완료 - 보안 우려 부당함검토 후 원본 의견이 부당함을 확인했습니다.
주요 발견:
티켓 코드는 예측 불가능함:
UUID.randomUUID()+ SHA-256 해시를 사용하며, 해시의 처음 5바이트(10자 16진수)를 대문자로 변환하는 방식으로 생성됩니다. 이는 암호학적으로 안전하며 열거 불가능합니다.공개 엔드포인트는 의도적이고 설계가 적절함:
GET /api/tickets/door/validation/{ticketCode}: 행사명, 티켓타입명, 시간정보만 반환 (모두 공개 정보)POST /api/tickets/door/staff/confirm: 티켓코드 + checkCode(행사별 고유값) 필수 검증데이터 노출 최소화: 반환 정보는 이미 공개된 행사/티켓 정보이며 개인정보나 민감 데이터 미포함
도어 디바이스 인증용으로 의도적으로 공개된 엔드포인트이며, 구현된 티켓 코드 생성 방식은 충분히 안전합니다.
Likely an incorrect or invalid review comment.
🔥Pull requests
⛳️ 작업한 브랜치
👷 작업한 내용
🚨 참고 사항