from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any from decimal import Decimal from datetime import datetime class UserAuthRequest(BaseModel): address: str = Field(..., description="EVM 钱包地址") signature: str = Field(..., description="签名") message: str = Field(..., description="SIWE 原始签名消息") class TokenResponse(BaseModel): access_token: str token_type: str = "bearer" address: str class AccountBalanceDTO(BaseModel): address: str collateral_symbol: str available_balance: Decimal frozen_balance: Decimal class LedgerEntryDTO(BaseModel): id: int entry_type: str amount: Decimal balance_after: Decimal frozen_after: Decimal related_market: Optional[str] = None created_at: datetime class CreateMarketRequest(BaseModel): title: str description: Optional[str] = None category: str = "Crypto" tier: int = 1 resolution_time: datetime outcomes: List[str] = Field(..., min_length=2, max_length=8) class MarketDTO(BaseModel): market_address: str question_id: str title: str description: Optional[str] = None category: str tier: int creator: str status: str outcomes: List[str] winning_outcome: Optional[int] = None resolution_time: datetime created_at: datetime class CreateOrderRequest(BaseModel): market_address: str outcome_index: int = Field(..., ge=0, le=7) side: str = Field(..., pattern="^(BUY|SELL)$") amount: Decimal = Field(..., gt=0) price: Optional[Decimal] = None class OrderDTO(BaseModel): order_id: str market_address: str user_address: str side: str outcome_index: int amount: Decimal status: str fee: Decimal created_at: datetime