Files
dy/backend/payments/schemas.py
T
2026-07-23 17:56:25 +08:00

70 lines
1.5 KiB
Python

from datetime import datetime
from typing import Literal, Optional
from pydantic import BaseModel, Field
class PaymentConfigResponse(BaseModel):
payment_enabled: bool
demo_mode: bool
unit_price: float
min_slots: int
max_slots: int
channels: list[str]
wechat_available: bool
alipay_available: bool
class CreatePaymentOrderRequest(BaseModel):
slots: int = Field(ge=1, le=100)
channel: Literal["wechat", "alipay"]
class PaymentOrderResponse(BaseModel):
order_no: str
channel: str
slots: int
amount_fen: int
amount_yuan: float
status: str
qr_code: Optional[str] = None
pay_url: Optional[str] = None
paid_at: Optional[datetime] = None
expires_at: Optional[datetime] = None
created_at: Optional[datetime] = None
demo_mode: bool = False
class PaymentOrderListItem(BaseModel):
id: int
order_no: str
user_id: int
username: Optional[str] = None
display_name: Optional[str] = None
channel: str
slots: int
amount_fen: int
amount_yuan: float
status: str
trade_no: Optional[str] = None
is_demo: bool = False
paid_at: Optional[datetime] = None
created_at: datetime
class PaymentOrderListResponse(BaseModel):
items: list[PaymentOrderListItem]
total: int
page: int
page_size: int
paid_count: int = 0
paid_amount_yuan: float = 0
class AdminUpdateOrderStatusRequest(BaseModel):
status: Literal["pending", "paid", "expired", "cancelled", "refunded"]
class MessageResponse(BaseModel):
message: str