feat(admin-charge): 관리자 캔 환불 API로 미사용 7일 이내 환불을 처리한다

This commit is contained in:
2026-03-05 17:05:05 +09:00
parent 12f3a76c57
commit 21d26b76f4
6 changed files with 430 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
- [x] 기존 charge/payment/member 및 admin API 패턴 확인
- [x] `kr.co.vividnext.sodalive.admin.charge` 패키지에 캔 환불 API 생성
- [x] 환불 조건 검증 구현 (미사용, 7일 이내)
- [x] ChargeEntity/PaymentEntity/MemberEntity 환불 반영 로직 구현
- [x] 캔 환불 API 테스트 코드 작성
- [x] 검증 실행 및 결과 기록
## 환불 조건 상세
- 환불 가능 충전내역 조건: `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` 실행 → 성공