Admin APIAdmin Finance API
DELETE /ai/admin/finance/ledger/{txId}
크레딧 이력 소프트 삭제 (이후 balance_after 재계산)
크레딧 이력 삭제 (soft)
deletedAt 을 찍어 원장에서 제외합니다. 행 자체는 DB 에 남지만 조회·집계·재계산 어디에도
잡히지 않고, 삭제 지점 이후 행의 balanceAfter 는 삭제분을 뺀 값으로 재계산됩니다.
물리 삭제를 하지 않는 이유는 감사 로그(TB_CREDIT_TRANSACTION_AUDIT)의 tx_id 가 가리킬
대상을 남겨두기 위해서입니다.
HTTP 요청
DELETE /ai/admin/finance/ledger/{txId}?adminId={adminId}
Authorization: Bearer {access_token}Path / Query Parameters
| 파라미터 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
txId | path | Long | 예 | 삭제할 원장 행 id |
adminId | query | String | 아니오 | 처리자 ID |
재계산 동작
[삭제 전] [07-05 행 삭제]
07-01 +100,000 → 100,000 07-01 +100,000 → 100,000 (그대로)
07-05 -30,000 → 70,000 07-05 -30,000 ← 삭제 (원장에서 제외)
07-09 -20,000 → 50,000 07-09 -20,000 → 80,000 ← 재계산
remainCredit: 50,000 → 80,000 (델타 +30,000)삭제가 함께 반영되는 곳
| 대상 | 반영 |
|---|---|
| 어드민 파이낸스 타임라인 (기업/캠페인) | 목록에서 제외 |
캠페인 입금 합계 (sumCampaignDeposits*) | 합계에서 제외 |
| 캠페인 최초 입금액 (착수금 게이트 분모) | 후보에서 제외 |
| 에이전시 고객사 크레딧 내역 | 목록에서 제외 |
응답 (200 OK)
{
"status": 200,
"code": null,
"message": "크레딧 이력 삭제 완료",
"data": {
"transaction": {
"id": 2103,
"amount": -30000,
"occurredAt": "2026-07-05T10:00:00",
"deletedAt": "2026-08-11T14:20:03"
},
"recalculatedCount": 1,
"newRemainCredit": 80000,
"expectedRemainCredit": 80000,
"balanceMismatch": false
}
}에러
| 상태 | 조건 |
|---|---|
409 | 이미 삭제된 행 / reverse 행 자체 / 이미 reverse 된 원본 (FINANCE_002) |
503 | 기업 행 락 경합 (DB_LOCK_ERROR) — 재시도 |