Files
eryao/backend/src/v1/payments/dependencies.py
T
zl-q f07e307e82 feat: integrate CREEM web payment for credits purchase
Replace abandoned iOS App Store route with CREEM Merchant of Record
payment integration for web-based credits purchase.

Backend changes:
- Add CreemClient for CREEM API communication
- Add CreemService for checkout creation and webhook handling
- Add creem_transactions table for payment tracking
- Fix webhook payload parsing (id, order.id, customer.id structure)
- Integrate with existing points ledger system

Frontend changes:
- Display dynamic prices from CREEM API
- Support decimal price formatting (e.g., $1.00)
- Add checkout flow with redirect to CREEM hosted page
2026-05-11 18:38:21 +08:00

35 lines
1.1 KiB
Python

from __future__ import annotations
from fastapi import Depends
from sqlalchemy.ext.asyncio import AsyncSession
from core.db import get_db
from v1.payments.apple_verifier import AppleJwsVerifier
from v1.payments.creem_client import CreemClient
from v1.payments.creem_service import CreemService
from v1.payments.repository import PaymentRepository
from v1.payments.service import PaymentService
from v1.points.repository import PointsRepository
def get_payment_service(session: AsyncSession = Depends(get_db)) -> PaymentService:
payment_repo = PaymentRepository(session)
points_repo = PointsRepository(session)
verifier = AppleJwsVerifier()
return PaymentService(
payment_repo=payment_repo,
points_repo=points_repo,
verifier=verifier,
)
def get_creem_service(session: AsyncSession = Depends(get_db)) -> CreemService:
payment_repo = PaymentRepository(session)
points_repo = PointsRepository(session)
client = CreemClient()
return CreemService(
payment_repo=payment_repo,
points_repo=points_repo,
client=client,
)