Files
sodalive-backend-spring-boot/docs/20260305_캔환불API생성.md

2.4 KiB

  • 기존 charge/payment/member 및 admin API 패턴 확인
  • kr.co.vividnext.sodalive.admin.charge 패키지에 캔 환불 API 생성
  • 환불 조건 검증 구현 (미사용, 7일 이내)
  • ChargeEntity/PaymentEntity/MemberEntity 환불 반영 로직 구현
  • 캔 환불 API 테스트 코드 작성
  • 검증 실행 및 결과 기록

환불 조건 상세

  • 환불 가능 충전내역 조건: charge.status == CHARGE 그리고 payment.status == COMPLETE
  • 이미 사용한 캔 판정 조건: charge.title에서 숫자를 추출해 현재 chargeCan/rewardCan과 비교
    • 예시1) 100 캔 + 50 캔 -> chargeCan = 100, rewardCan = 50
    • 예시2) 5,000 캔 + 500 캔 -> chargeCan = 5000, rewardCan = 500
    • 예시3) 500캔 -> chargeCan = 500
    • 예시4) 4,000 캔 -> chargeCan = 4000

검증 기록

1차 구현

  • 무엇을: 관리자 캔 환불 API(POST /admin/charge/refund)와 환불 서비스/요청 DTO, i18n 메시지, 단위 테스트를 추가했다.
  • 왜: 사용하지 않은 캔만 7일 이내 환불 가능하도록 하고, 환불 시 Charge/Payment/Member 상태를 요구사항대로 갱신하기 위해.
  • 어떻게:
    • ./gradlew test --tests "kr.co.vividnext.sodalive.admin.charge.AdminChargeRefundServiceTest" 실행 → 성공
    • ./gradlew build 실행 → 성공 (ktlint/check/test/build 포함)
    • LSP 진단 시도(lsp_diagnostics) → Kotlin LSP 미설정으로 불가, 대신 Gradle 컴파일/ktlint/test/build로 검증

2차 수정

  • 무엇을: AdminChargeRefundServiceTest에 한글 @DisplayName을 추가하고, 각 테스트 문단에 given/when/then 역할 주석을 보강했다.
  • 왜: 테스트 의도를 한눈에 파악하고, 문단별 책임을 명확히 하기 위해.
  • 어떻게:
    • ./gradlew test --tests "kr.co.vividnext.sodalive.admin.charge.AdminChargeRefundServiceTest" 실행 → 성공
    • ./gradlew ktlintTestSourceSetCheck 실행 → 성공

3차 수정

  • 무엇을: 이미 사용한 캔 판정을 charge.title 숫자 파싱 비교 방식으로 변경하고, 단일 숫자/콤마 포함 제목 테스트 케이스를 추가했다.
  • 왜: 환불 조건을 충전 제목 기반 비교 규칙(단일/복수 숫자, 콤마 포함)으로 명확하게 적용하기 위해.
  • 어떻게:
    • ./gradlew test --tests "kr.co.vividnext.sodalive.admin.charge.AdminChargeRefundServiceTest" 실행 → 성공
    • ./gradlew build 실행 → 성공