-
Notifications
You must be signed in to change notification settings - Fork 1
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] 할인 쿠폰 발급 #82
The head ref may contain hidden characters: "feature/75_kimhyun5u_\uD560\uC778-\uCFE0\uD3F0-\uBC1C\uAE09"
[feat] 할인 쿠폰 발급 #82
Conversation
- CouponIssuanceTest.testConstruct: CouponIssuance 생성자 테스트
- CouponIssuance: Customer와 Coupon 을 갖는다. 또한, 발급일, 사용일을 기록한다.
- 잘못된 Exception 상속 수정
- CouponIssuanceTest.testConstructWithNullCoupon: Coupon 이 Null 인 경우 예외 처리 - CouponIssuanceTest.testConstructWithNullCustomer: Customer 가 Null 인 경우 예외 처리 - CouponIssuanceTest.testConstructWithExpiredCoupon: 만료된 쿠폰인 경우 예외 처리
- CouponErrorCode.EXPIRED_COUPON: 만료된 쿠폰 에러
- NullPointException 이 아닌 InvalidICreationIssuanceException 을 던지도록 변경
- CouponIssuanceErrorCode 를 사용하도록 변경
- CouponIssuance 생성 시 Customer 와 Coupon 의 NUll 여부 확인 및 Coupon 만료일이 발급일 전인지 확인
- errorCode 변경
- Coupon.isExpired: 쿠폰 만료 상태 확인 메소드
- CouponIssuance 생성 시 Null 값 과 쿠폰 만료 상태 검증
- Coupon 에서는 쿠폰이 만료되었더라도 에러를 발생할 이유가 없어 에러 소유를 CouponIssuance 로 넘김
- 만료일 테스트를 위해 수동으로 바꿀 수 있도록 변경
- CouponIssuanceTest.testConstructWithExpiredCoupon 에서 Coupon 이 정상적으로 생성된 후 만료되는 시나리오로 변경
- JpaRepository 기본 키 수정
- IssueCouponServiceTest.testIssueCoupon: 쿠폰 발급 검증 테스트
- test를 위해 사용할 Customer
- test를 위해 사용할 CouponIssuance
- CustomerFixture.createCustomer(UUID): 기본 설정에 id 값만 바뀌는 customer 생성 메소드
- CouponIssuanceFixture.createCouponIssuance: 테스트에서 사용할 CouponIssuance 생성
- IssueCouponService.issueCoupon: 구매자에게 쿠폰을 발행
- IssueCouponServiceTest.testIssueCouponFailWithNotExistCustomer: 사용자가 존재하지 않는 요청 검증 테스트 - IssueCouponServiceTest.testIssueCouponFailWithNotExistCoupon: 쿠폰이 존재하지 않는 요청 검증 테스트 - IssueCouponServiceTest.testIssueCouponFailWithExpiredCoupon: 만료된 쿠폰을 발행하는 요청 검증 테스트
- IssueCouponService.issueCoupon 에 ExpiredCouponException 발생 명시
- IssueCouponServiceTest.testIssueCouponFailWithInsufficientCouponQuantity: 수량 부족 시나리오 검증 테스트
- 테스트를 위해 커스텀 할 수 있도록 수정
- IssueCouponServiceIntegrationTest.testIssueCoupon: 쿠폰 발급 성공 검증 테스트 - IssueCouponServiceIntegrationTest.testIssueCouponFailWithInsufficientQuantity: 쿠폰 수량 부족 실패 검증 테스트 - IssueCouponServiceIntegrationTest.testIssueCouponWithConcurrency: 동시성 제어 검증 테스트
- CouponFixture.createCoupon(String, int, int, LocalDateTime): Coupon Entity 를 생성하는 메서드
- CouponRepository.findByIdWithPessimisticLock: 비관적 락 적용 조회 쿼리
- 쿠폰 조회 시 CouponRepository.findByIdWithPessimisticLock 사용하도록 변경
- `@DisplayName` 수정: 쿠폰 발급 -> 쿠폰 등록
- CouponApiControllerTest.testIssueCoupon: 조건 명시적으로 등록
- CouponApiControllerTest.testIssueCoupon: 쿠폰 발급 요청 검증 테스트
- session 등록 시 SessionConst.SESSION_CUSTOMER_KEY 사용하도록 수정 - 응답 코드 CREATED 로 변경
- CouponApiController.issueCoupon: 쿠폰 발급 API
- InsufficientCouponQuantityException message 수정
- IssueCouponService.issueCoupon throws 주석 오류 수정
- CouponApiControllerTest.testIssueCouponFailWithoutSession: 세션 없이 쿠폰 발급 요청 검증 테스트 - CouponApiControllerTest.testIssueCouponFailWithNotExistsId: 존재하지 않는 쿠폰 또는 구매자 쿠폰 발급 요청 검증 테스트 - CouponApiControllerTest.testIssueCouponFailWithExpiredCoupon: 만료된 쿠폰 발급 요청 검증 테스트 - CouponApiControllerTest.testIssueCouponFailWithInsufficientQuantity: 수량이 부족한 쿠폰 발급 요청 검증 테스트
- InvalidICreationIssuanceException, ExpiredCouponException 에 대한 예외 핸들링 추가
- 비관적 락 적용에 따른 테스트 코드 수정
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.
다른 부분은 동훤님이 잘 찝어주셔서 사소한 리뷰 남기겠습니다!
src/main/java/camp/woowak/lab/coupon/domain/CouponIssuance.java
Outdated
Show resolved
Hide resolved
- 발급 시간 변경 제한 Co-authored-by: 김현욱 <43038815+Hyeon-Uk@users.noreply.github.com>
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.
LGTM ! :~)
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.
LGTM!
💡 다음 이슈를 해결했어요.
Issue Link - #75
💡 이슈를 처리하면서 추가된 코드가 있어요.
CouponIssuance
쿠폰 발급 엔티티 입니다.
IssueCouponeService
쿠폰 발급 로직을 담당하는 서비스입니다.
💡 이런 고민을 했어요.
동시성 제어 성능 고민
낙관적 락 사용

비관적 락 사용

CouponIssuance 는 어디에 ?
+ 할인 쿠폰 발급은 Coupon 도메인에서 담당한다.
+ 할인 쿠폰 생성 시 Coupon 과 Customer 가 null 이 아니어야 한다.
+ 할인 쿠폰 만료일이 발급일보다 이전이여야한다.
+ 할인 쿠폰의 수량이 0일 때 발급 받을 수 없다.
✅ 셀프 체크리스트