feat(payouts): admin review, PayoutProvider interface, and ledger audit trail

This commit is contained in:
2026-09-15 20:44:27 +00:00
parent 997a217db5
commit 6ed409f727
2 changed files with 128 additions and 0 deletions
+20
View File
@@ -15,7 +15,9 @@ from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.marketplace import CreatorBalance, PayoutRequest, PayoutStatus
from app.models.wallet import Transaction, TransactionType
from app.services.purchase import PurchaseService
from app.services.wallet import WalletService
logger = logging.getLogger(__name__)
@@ -158,6 +160,24 @@ class PayoutService:
payout.reviewed_by = reviewer_id
payout.reviewed_at = now
# Record immutable ledger audit row
wallet = await WalletService.get_or_create_wallet(db, payout.creator_id, for_update=True)
tx = Transaction(
wallet_id=wallet.id,
type=TransactionType.payout,
amount=-payout.amount,
balance_after=wallet.balance,
reference_type="payout_request",
reference_id=str(payout.id),
idempotency_key=f"payout-audit-{payout.id}",
metadata_json={
"provider_ref": provider_ref,
"reviewed_by": reviewer_id,
"external_ref": payout.external_ref,
},
)
db.add(tx)
await db.commit()
await db.refresh(payout)
return payout