from pydantic import BaseModel, condecimal, conint, Field from typing import Optional from datetime import date, datetime from decimal import Decimal from typing import Literal class OrderInfo(BaseModel): order_id: int user_id: Optional[int] order_date: date num_players: int order_status: str # 额外字段 payable_price: Optional[Decimal] = None paid_price: Optional[Decimal] = None payment_method: Optional[str] = None start_datetime: Optional[datetime] = None end_datetime: Optional[datetime] = None discount_amount: Optional[Decimal] = None used_points: Optional[int] = None coupon_id: Optional[int] = None game_process_time: Optional[int] = None game_table_number: Optional[str] = None user_name: Optional[str] = None settlement_time: Optional[datetime] = None class OrderListResponse(BaseModel): orders: list[OrderInfo] total: int class OrderRangeQueryRequest(BaseModel): token: str start: int end: int order_status: Literal['pending', 'paid', 'in_progress', 'completed', 'cancelled'] # 订单状态包含:['待处理', '已支付', '进行中', '已完成', '已取消'] class OrderCompleteRequest(BaseModel): token: str end_datetime: datetime class OrderSettleRequest(BaseModel): token: str used_points: int = Field(ge=0) coupon_id: Optional[int] = None class OrderDetailResponse(OrderInfo): table_price: Decimal game_price: Optional[Decimal] = None class Config: arbitrary_types_allowed = True class OrderDetailRequest(BaseModel): token: str order_id: int