57 lines
1.1 KiB
Python
57 lines
1.1 KiB
Python
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 |