from pydantic import BaseModel from typing import Optional, Literal from datetime import datetime class VasPaymentBase(BaseModel): status: Optional[Literal['pending', 'succeeded', 'failed', 'expired', 'late_paid']] = None qr_id: Optional[int] = None payment_url: Optional[str] = None expire_at: Optional[datetime] = None provider_payload: Optional[dict] = None class VasPaymentCreate(BaseModel): order_id: str provider: Literal['stripe', 'wechat', 'alipay'] class VasPaymentUpdate(VasPaymentBase): pass class VasPaymentOut(VasPaymentBase): id: int order_id: str provider: str channel: str payment_intent_id: Optional[str] external_trade_no: Optional[str] base_amount: int base_currency: str amount: int currency: str random_offset: int exchange_rate: float # 注意:仅用于展示,DB 里是 DECIMAL created_at: datetime updated_at: datetime class Config: orm_mode = True