from datetime import datetime from typing import List, Optional, Dict, Any from pydantic import BaseModel class PoolBase(BaseModel): dex_id: int address: str token_a_address: str token_a_symbol: Optional[str] = None token_a_name: Optional[str] = None token_a_decimals: Optional[int] = None token_b_address: str token_b_symbol: Optional[str] = None token_b_name: Optional[str] = None token_b_decimals: Optional[int] = None token_a_reserve: Optional[float] = None token_b_reserve: Optional[float] = None last_updated_slot: Optional[int] = None fee_rate: Optional[float] = None pool_type: Optional[str] = None is_active: bool = True class PoolCreate(PoolBase): pool_metadata: Optional[Dict[str, Any]] = None class PoolUpdate(BaseModel): token_a_symbol: Optional[str] = None token_a_name: Optional[str] = None token_a_decimals: Optional[int] = None token_b_symbol: Optional[str] = None token_b_name: Optional[str] = None token_b_decimals: Optional[int] = None token_a_reserve: Optional[float] = None token_b_reserve: Optional[float] = None last_updated_slot: Optional[int] = None volume_24h: Optional[float] = None fees_24h: Optional[float] = None tvl: Optional[float] = None fee_rate: Optional[float] = None pool_type: Optional[str] = None is_active: Optional[bool] = None pool_metadata: Optional[Dict[str, Any]] = None class PoolInDBBase(PoolBase): id: int volume_24h: Optional[float] = None fees_24h: Optional[float] = None tvl: Optional[float] = None pool_metadata: Optional[Dict[str, Any]] = None created_at: datetime updated_at: datetime class Config: from_attributes = True class Pool(PoolInDBBase): pass class PoolWithDex(Pool): dex_name: str dex_address: str class PoolList(BaseModel): pools: List[PoolWithDex] total: int