70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
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
|