from typing import Optional from pydantic import BaseModel, Field from datetime import datetime import enum class WithdrawalStatus(str, enum.Enum): PENDING = "pending" APPROVED = "approved" REJECTED = "rejected" class WithdrawalBase(BaseModel): amount: float = Field(..., gt=0) fee: float = Field(0.0, ge=0) wallet_address: str admin_notes: Optional[str] = None class WithdrawalCreate(WithdrawalBase): user_id: int class WithdrawalUpdate(BaseModel): status: Optional[WithdrawalStatus] = None transaction_hash: Optional[str] = None admin_notes: Optional[str] = None class WithdrawalInDBBase(WithdrawalBase): id: int user_id: int status: WithdrawalStatus transaction_hash: Optional[str] = None created_at: datetime updated_at: datetime class Config: orm_mode = True class Withdrawal(WithdrawalInDBBase): pass class WithdrawalRequest(BaseModel): amount: float = Field(..., gt=0) wallet_address: str class WithdrawalApprove(BaseModel): transaction_hash: str admin_notes: Optional[str] = None class WithdrawalReject(BaseModel): admin_notes: str