f07e307e82
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
35 lines
1.1 KiB
Python
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,
|
|
)
|