-
Notifications
You must be signed in to change notification settings - Fork 0
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
[feat] #200 - 공연회차 등록 10회까지 가능하도록 수정 #201
Conversation
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.
혜린님 고생하셨습니다!!
다만, 첫 공연 생성 시에는 scheduleNumber를 주지만 이후 공연 수정에서는 scheduleNumber를 부여하지 않고 performanceDate로 정렬할 수 있도록 리팩토링을 해놓았습니다. 그런데 postman상 put 요청에서 scheduleNumber를 부여하시는 것 같은데, 부여하지 않고 다시 한 번 테스트를 해서 잘 작동이 되는지 확인해주시면 감사하겠습니다~
@@ -195,7 +195,7 @@ private Schedule addSchedule(ScheduleModifyRequest request, Performance performa | |||
|
|||
long existingSchedulesCount = scheduleRepository.countByPerformanceId(performance.getId()); | |||
|
|||
if ((existingSchedulesCount + 1) > 3) { | |||
if ((existingSchedulesCount + 1) > 10) { |
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.
이 부분 회차가 10개 넘어갈 시 에러를 반환하는지도 같이 테스트 해주시면 감사할 것 같습니다!
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.
테스트 후 conversation에 추가해뒀습니다!
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.
request body에 dto와 다른 추가 필드를 포함했을 때 문제가 발생할 여지가 있는지에 대한 검토는 필요하지 않을 것 같습니다!
왜냐하면 Spring Boot에서 Jackson 라이브러리를 사용하여 JSON을 처리할 때, 기본적으로 알 수 없는 속성(즉, DTO에 정의되지 않은 속성)은 무시되도록 설정되어 있기 때문입니다.
찾아보니 이 설정은 Jackson의 기본 동작으로, DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 옵션이 false로 설정되어 있기 때문이라고 하네요!!
참고하시면 좋을 링크 남기고 갑니다 ㅎㅎ
https://siahn95.tistory.com/173#google_vignette
https://www.baeldung.com/spring-boot-customize-jackson-objectmapper
* [#190] chore(Booking): 공백 제거 * [#190] feat(FileSuccessCode): S3 관련 성공 메시지를 관리하는 열거형 생성 * [#190] feat(PresignedUrlFindAllResponse): 공연 생성 관련 presignedUrl 응답 DTO 구현 * [#190] refactor(FileService): 메서드 명 변경 및 정적 팩토리 메서드로 반환하도록 변경 * [#190] feat(FileApi): Performance PreSigned Url 스웨거 명세서 작성 * [#190] feat(FileController): FileApi 인터페이스를 구현하도록 리팩토링 및 SuccessResponse로 반환하도록 변경 * [#190] refactor(SecurityConfig): AUTH_WHITELIST에 /error url 추가 * [#190] refactor(SwaggerConfig): 릴리즈 버전 수정 * [#190] refactor: 폴더 변경 및 이동 * [feat] #200 - 공연회차 등록 10회까지 가능하도록 수정 (#201) * [#200] fix(ScheduleNumber): 10회차까지 추가 * [#200] fix(PerformanceModifyService): 공연 회차 수정 중 회차 추가 시 검증 로직 10회차까지 허용 가능하도록 변경 * [#200] feat(PerformanceErrorCode): MAX_SCHEDULE_LIMIT_EXCEEDED message 수정 * feat #202 - allowedMethods에 PATCH 메서드 추가 및 allowedOriginPatterns에 도메인 명시 (#203) * [#202] feat(WebConfig): PATCH 메서드 추가 및 allowedOriginPatterns에 도메인 명시 * [#202] feat(WebConfig): 클라이언트 localhost 주소 추가 * [#202] fix(WebConfig): 문자열 오타 수정 * [fix] #204 - SuccessReponse 메서드 타입 수정 및 회원 예매 조회 타입 일치 완료 (#205) * [#204] fix(SuccessResponse): 메서드에 제네릭 타입 명시 * [#204] fix(BookingController): 회원 예매 조회 response 타입 일치하도록 수정 * [#206] fix(TokenErrorCode): 토큰 만료 메시지 status 401로 변경 (#207) * [#190] refactor: 패키지명 변경 - service에서 application으 * [#190] refactor(KakaoSocialService): 변수명 camelCase로 변경 * [#190] refactor(MemberService): 가독성을 위한 소셜로그인 서비스 로직 리팩토링 * [#190] refactor(MemberService): 메서드명을 역할에 부합하도록 수정 * [#190] refactor(MemberController): 변경된 메서드명으로 리팩토링 * [#190] feat(MemberRegistrationService): 서비스 분리 및 회원 등록 서비스 생성 * [#190] feat(AuthenticationService): 서비스 분리 및 인증 서비스 생성 * [#190] feat(SocialLoginService): 서비스 분리 및 소셜로그인 관리 서비스 생성 * [#190] refactor(MemberService): 회원 서비스 분리를 위한 리팩토링 * [#190] refactor(MemberController): 서비스 객체 변경 * [#190] feat(Role): 사용자의 역할을 관리하는 열거형 생성 * [#190] refactor(Users): 열거형 필드 추가 및 protected 기본생성자 추가 * [#190] refactor(LoginSuccessResponse): 로그인 성공 응답 DTO에 역할 필드 추가 * [#190] refactor(Member): 기본생성자의 접근제어자 protected로 수정 및 user 필드 지연 로딩으로 변경 * [#190] feat(AuthenticationService): 역할에 따른 토큰 발급 및 유효성 검사 추가 - 리프레시 토큰이 만료된 경우, generateAccessTokenFromRefreshToken 메서드에서 만료 에러 반환을 추가. - 사용자의 Role (Admin 또는 Member)에 따라 각각의 권한으로 새로운 Access Token을 발급하도록 수정. - generateLoginSuccessResponse 메서드에서 로그인 성공 시 사용자 역할에 따라 인증 객체를 생성하고, Access 및 Refresh 토큰을 발급. * [#190] feat(AdminAuthentication): Admin 사용자 인증 객체 추가 - Spring Security의 UsernamePasswordAuthenticationToken을 상속하여, 관리자 권한을 포함한 인증 객체 생성 가능. * [#190] refactor(JwtTokenProvider): JWT 토큰 발급시 역할 부여 및 검증 로직 개선 - JWT 토큰 발급 시 사용자 정보(memberId)와 역할(role)을 포함한 클레임 생성. - getMemberIdFromJwt 및 getRoleFromJwt 메서드를 통해 토큰에서 사용자 정보와 역할을 추출하는 기능 구현. - "ROLE_" 접두사를 제거한 후, 역할을 추출하여 Role Enum에 맞게 변환하는 로직 추가. * [#190] refactor(SocialLoginService): 사용자 정보 조회 로직 수정 - `generateLoginResponseFromMemberInfo` 메서드에서 회원 정보를 조회할 때 `memberService.findUserByMemberId(memberId)`를 통해 Users 객체를 조회하도록 수정. * [#190] refactor(MemberRegistrationService): 유저 정보로 회원등록시 역할을 MEMBER로 설정하도록 변경 * [#190] feat(MemberService): 회원 ID로 Users 정보 조회 메서드 추가 * [#190] feat(TokenErrorCode): 리프레시 토큰 만료 에러 코드 추가 * [#190] refactor(MemberController): 로그인/회원가입 API에서 역할도 반환하도록 수정 * [#190] refactor(JwtAuthenticationFilter): JWT 토큰 검증 및 인증 설정 로직 개선 - JWT 토큰이 만료되었거나 유효하지 않은 경우 적절한 HTTP 상태 코드(401, 400)를 반환하도록 처리 추가. - `setAuthentication` 메서드를 통해 토큰에서 추출한 memberId와 role로 권한 설정. - `handleInvalidToken` 메서드를 분리하여 토큰 상태에 따른 응답 처리 설정. - `createAuthentication` 메서드에서 role에 따라 Admin 또는 Member 인증 객체 생성. * [#190] chore(.gitignore): application-local.yml을 .gitignore에 추가 * [#190] chore(JwtAuthenticationFilter): 불필요한 import문 삭제 * [#190] chore(TokenService): 코드 가독성을 위한 리팩토링 * [#190] refactor(JwtTokenProvider): SignatureException 에러처리 추가 및 로그 추가 * [#190] refactor(AuthenticationService): 리프레시 토큰을 이용해 새로운 액세스 토큰 발급 시 토큰 검증 구체화 및 로그 추가 * [#190] refactor(TokenErrorCode): 리프레쉬 토큰 관련 에러코드 추가 * [#190] refactor(AuthenticationService): 에러코드 변경 * [#190] feat(SecurityConfig): ADMIN 권한 설정 추가 * [#190] feat(UserFindAllResponse): 유저 테이블의 정보를 반환하는 응답 DTO 생성 * [#190] delete(UserResponse): UserResponse 삭제 * [#190] feat(AdminSuccessCode): 관리자 성공 코드 및 모든 유저 조회 성공메시지 생성 * [#190] feat(AdminService): 관리자가 모든 유저를 불러올 수 있는 서비스 로직 생성 * [#190] feat(AdminController): 관리자가 모든 유저를 불러오는 GET API 생성 * [#190] refactor(AdminController): 토큰을 줘서 역할 검증을 하도록 변경 * [#190] feat(UserResponse): 유저 정보를 객체로 반환하는 응답 DTO 생성 * [#190] refactor: CurrentMemberArgumentResolver로 클래스 이름 수정 * [#190] fix(UserFindAllResponse): Users 객체가 Hibernate 프록시 객체로 반환되어 직렬화되지 못했던 부분 수정 * [#190] chore(GlobalExceptionHandler): ExceptionHandler 분리 및 로그 명시 * [#190] chore(CustomAccessDeniedHandler): 권한 부족 로그 명시 * [#190] chore(CustomJwtAuthenticationEntryPoint): 인증되지 않은 요청 로그 명시 * [#190] refactor(CustomJwtAuthenticationEntryPoint): 토큰에서 추출한 memberId가 DB에 존재하는지 확인하는 로직 추가 * [#190] chore(FileApi): 스웨거 문서 수정 * [#190] chore(AdminApi): 관리자 API 스웨거 문서 작성 * [#190] chore(AdminController): 스웨거 인터페이스 implements 및 메서드 오버라이딩 * [#190] rename(PerformanceMakerPresignedUrlFindAllResponse): 공연 메이커를 위한 presignedUrl을 발급하는 응답 DTO 역할에 맞게 레코드 rename * [#190] rename(UserFindResponse): 기존 UserResponse를 역할에 부합하는 이름으로 rename * [#190] refactor(UserFindAllResponse): rename된 이름으로 변경 * [#190] chore(FileSuccessCode): 성공메시지 구체화 * [#190] refactor(AdminSuccessCode): 캐러셀, 배너 presignedUrl 발급 성공메시지 추가 * [#190] refactor(AdminUserManagementService): AdminUserManagementService로 rename 및 ifPresentOrElse로 가독성 개선 * [#190] refactor(BannerPresignedUrlFindResponse): 배너 presignedUrl 응답 DTO 생성 * [#190] refactor(CarouselPresignedUrlFindAllResponse): 캐러셀 presignedUrl 응답 DTO 생성 * [#190] refactor(FileController): 공연 메이커를 위한 presignedUrl 응답 DTO의 이름 변경으로 인한 반환 레코드명 수정 * [#190] refactor(FileService): 캐러셀/배너 presignedUrl 서비스 로직 구현 및 컨벤션에 맞게 메서드명 수정 * [#190] feat(AdminController): 캐러셀/배너 presignedUrl GET API 구현 * [#190] feat(AdminApi): 캐러셀/배너 presignedUrl GET API 스웨거 명세 작성 * [#190] refactor(FileApi): DTO 이름 변경으로 인한 명세서 수정 --------- Co-authored-by: hyerinhwang-sailin <[email protected]>
Related issue 🛠
Work Description ✏️
Trouble Shooting ⚽️
Related ScreenShot 📷
10회차 공연 생성 테스트
10회차 공연 상세정보 조회
등록한 공연 목록 조회
비회원 예매 요청 테스트
비회원 예매 확인
회원 예매 요청 테스트
회원 예매 확인
예매자 목록 조회
전체 예매자 목록 조회가 정상적으로 이루어짐을 확인했습니다.
회차별 예매자 목록 조회가 정상적으로 이루어짐을 확인했습니다.
수정하기에 필요한 공연 상세정보 조회
10회차 공연 정보 수정 테스트
예매하기에 필요한 공연 상세정보 조회
예매자 입금 여부 수정
예매 취소 요청
추가 테스트
공연 정보 수정 시 request body에 scheduleNumber 미포함해도 수정되는지 확인
9회차까지 존재하던 공연에 회차를 하나 추가하는 수정 요청을 보낸 결과 정상적으로 추가됨을 확인했습니다. 이때 기존 dto 양식에 맞게 request body에 scheduleNumber 미포함했습니다.
공연 정보 수정 시 회차 추가로 인해 총 회차가 10회를 초과하는 요청을 보낼 때 에러 반환하는지 확인
의도한대로 에러를 반환하는 것을 확인했습니다.
Uncompleted Tasks 😅
To Reviewers 📢
scheduleModifyRequests에 scheduleNumber 포함해서 요청했을 때도 정상 요청으로 인식되고 수정도 성공한 것에 대한 확인을 위해 테스트를 진행했습니다.
1회차의 티켓 수를 수정하는 요청을 scheduleNumber을 포함해 보내자 정상 요청으로 판단했고 수정도 성공했습니다.
dto와 달리 request body를 작성했음에도 수정에 필요한 필드만 다 확인되면 정상으로 판단한 것으로 보입니다.
1회차의 티켓 수를 수정하는 요청을 보내며 이번엔 기존과 다른 scheduleNumber 포함해서 요청하는 테스트를 해봤는데 정상 요청으로 판단했고 티켓 수 수정도 성공했으며, response body에서 scheduleNumber가 duedate에 따라 다시 재부여되여 FIRST로 변경된 것도 확인했습니다.
이 부분에 대해 dto 양식에 대해 재검증하는 로직이 추가로 필요한가에 대한 리뷰어분의 생각이 궁금합니다. 저는 프론트 측에서 요청을 보낼 때 저희가 작성한 api 명세서에 맞춰 scheduleNumber를 포함하지 않고 보낼 것이고 서버에서는 request body로 받은 scheduleNumber 를 이용하지 않고 수정하기 때문에 로직을 추가로 작성하는 것의 필요성은 없다고 생각했지만 또 한편으로 다른 api도 request body에 dto와 다른 추가 필드를 포함했을 때 문제가 발생할 여지가 있는지에 대한 검토는 필요하다고 생각했습니다.