account.py 939 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import json
  2. from pydantic import BaseModel, field_validator
  3. from typing import Optional, Dict, Any, Literal
  4. class AccountBase(BaseModel):
  5. pool_name: str
  6. username: str
  7. password: Optional[str] = None
  8. extra_data: Optional[Dict[str, Any]] = None
  9. status: Optional[Literal['active','disable']] = None
  10. lock_until: float = 0
  11. @field_validator("extra_data", mode="before")
  12. def normalize_json_field(cls, v):
  13. if v is None:
  14. return None
  15. if isinstance(v, str):
  16. try:
  17. return json.loads(v)
  18. except Exception:
  19. return {}
  20. return v
  21. # --- 4. 请求/响应 Schema (Pydantic) ---
  22. class AccountCreate(AccountBase):
  23. pass
  24. class AccountResponse(AccountBase):
  25. id: int
  26. model_config = {
  27. "from_attributes": True
  28. }
  29. class LockRequest(BaseModel):
  30. pool_name: str
  31. username: str
  32. duration: Optional[int] = None