Admin APIAdmin Finance API
PUT /ai/admin/finance/credit-tx/{txId}
크레딧 트랜잭션 수정 (ledger reverse + new)
크레딧 트랜잭션 수정
원본 트랜잭션을 변경하지 않고, 같은 DB 트랜잭션 내에서:
- 원본을 가리키는 reverse 행 추가 (
reverseOfTxId = 원본.id,amount = -원본.amount) - 새
amount/reason/memo를 가진 본 행 추가
두 행 모두 transactionType 은 원본과 동일합니다. BUDGET_ADJUST 가 아닌 경우 Business.remainCredit 도 함께 조정됩니다.
이미 reverse 된 원본 또는 reverse 행 자체 는 재수정 불가 → IllegalStateException (의도상 409 Conflict, 현재는 500 으로 떨어짐).
HTTP 요청
PUT /ai/admin/finance/credit-tx/{txId}?adminId={adminId}
Authorization: Bearer {access_token}
Content-Type: application/jsonPath / Query Parameters
| 파라미터 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
txId | path | Long | 예 | 원본 CreditTransaction id |
adminId | query | String | 아니오 | 처리자 ID |
Request Body
{
"amount": -300000,
"reason": "RESHOOT_ADDITIONAL",
"memo": "재촬영 1회 추가"
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
amount | Integer | 예 | 새 금액. 부호는 원본과 동일하게 입력 (예: 캠페인 입금이었으면 음수) |
reason | CreditTransactionReason | 예 | 사유 |
memo | String | 조건부 | reason=ETC 일 때 필수 |
동작
T1 = 원본 (그대로 유지, 응답에는 reversed:true 로 노출)
T2 = reverse(T1) transactionType=T1.transactionType, amount=-T1.amount, reverseOfTxId=T1.id
T3 = replacement transactionType=T1.transactionType, amount=요청.amount, reason/memo 갱신BUDGET_ADJUST 가 아닌 경우 remainCredit 은 -T1.amount + 요청.amount 만큼 변동됩니다.
응답 (200 OK)
{
"status": 200,
"code": null,
"message": "트랜잭션 수정 완료",
"data": {
"id": 2103,
"transactionType": "CAMPAIGN_DEPOSIT",
"amount": -300000,
"balanceAfter": 1700000,
"collabNo": 482,
"candyPaymentId": null,
"description": "어드민 수정 (replacement)",
"reason": "RESHOOT_ADDITIONAL",
"memo": "재촬영 1회 추가",
"reverseOfTxId": null,
"createdAt": "2026-05-28T13:45:00",
"createdBy": "admin01"
}
}응답의 data 는 새 본 행(replacement) 입니다. reverse 행은 응답에 직접 포함되지 않지만,
이후 GET .../business|collab/... 호출 시 timeline 에 두 row 모두 노출됩니다.
에러
| 상태 | 조건 | 설명 |
|---|---|---|
400 | 입력 검증 실패 | amount=0, reason 누락, ETC + memo 누락 |
404 | 트랜잭션 없음 | |
500* | 이미 reverse 됨 / reverse 행 자체 | "이미 취소(reverse)된 트랜잭션입니다." |
500* | 잔액 부족 | replacement 적용 후 remainCredit < 0 |