Admin APIAdmin Finance API
PATCH /ai/admin/finance/budget/{budgetId}/amount
캠페인 LOCK 예산 금액 수정 (audit row 생성)
캠페인 LOCK 예산 금액 수정
크리에이터 제안별로 LOCK 된 CampaignBudget.amount 를 직접 변경합니다.
글로벌 잔액(Business.remainCredit) 은 동기화하지 않으며, 변경 diff 는
CreditTransaction(transactionType=BUDGET_ADJUST) audit row 로 남습니다.
글로벌 잔액 동기화가 필요하면 관리자가 별도로 POST /ai/admin/finance/collab/{collabNo}/credit
또는 다른 차감 흐름으로 보정해야 합니다.
HTTP 요청
PATCH /ai/admin/finance/budget/{budgetId}/amount?adminId={adminId}
Authorization: Bearer {access_token}
Content-Type: application/jsonPath / Query Parameters
| 파라미터 | 위치 | 타입 | 필수 | 설명 |
|---|---|---|---|---|
budgetId | path | Long | 예 | CampaignBudget.id |
adminId | query | String | 아니오 | 처리자 ID |
Request Body
{
"amount": 250000,
"reason": "RESHOOT_ADDITIONAL",
"memo": "재촬영 1회 추가로 5만원 감액"
}| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
amount | Integer | 예 | 새 LOCK 금액 (0 이상) |
reason | CreditTransactionReason | 예 | 사유 |
memo | String | 조건부 | reason=ETC 일 때 필수 |
동작
oldAmount = budget.amount
diff = newAmount - oldAmount // (양수: 증액 / 음수: 감액)
budget.amount = newAmount // 직접 mutate (status / unlock 시각 변경 없음)
save budget
audit = CreditTransaction(
transactionType = BUDGET_ADJUST,
amount = diff, // 음수면 감액, 양수면 증액
balanceAfter = business.remainCredit, // 변동 없음 → 스냅샷
collabNo = budget.collabNo,
description = "CampaignBudget#{id} 금액 oldAmount → newAmount",
reason, memo, createdBy
)응답 (200 OK)
{
"status": 200,
"code": null,
"message": "예산 금액 수정 완료",
"data": {
"id": 2120,
"transactionType": "BUDGET_ADJUST",
"amount": -50000,
"balanceAfter": 1500000,
"collabNo": 482,
"candyPaymentId": null,
"description": "CampaignBudget#88 금액 300000 → 250000",
"reason": "RESHOOT_ADDITIONAL",
"memo": "재촬영 1회 추가로 5만원 감액",
"reverseOfTxId": null,
"createdAt": "2026-05-28T14:00:00",
"createdBy": "admin01"
}
}에러
| 상태 | 조건 |
|---|---|
400 | amount < 0, reason 누락, ETC + memo 누락 |
404 | 예산 없음 |