user.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from typing import Optional
  2. from pydantic import BaseModel, EmailStr
  3. from datetime import datetime
  4. from typing import List
  5. class UserBase(BaseModel):
  6. mobile: str
  7. name: Optional[str] = None
  8. english_name: Optional[str] = None
  9. status: str = "PENDING"
  10. role: Optional[str] = "ORDINARY_USER"
  11. is_deleted: int = 0
  12. class UserCreate(UserBase):
  13. password: str
  14. admin_password: Optional[str] = None
  15. class UserRegister(BaseModel):
  16. mobile: str
  17. password: str
  18. sms_code: str # Added field
  19. name: str # Chinese Name
  20. class PromoteUserRequest(BaseModel):
  21. password: str
  22. captcha_id: str
  23. captcha_code: str
  24. class BatchResetEnglishNameRequest(BaseModel):
  25. user_ids: List[int]
  26. admin_password: str
  27. class UserUpdate(BaseModel):
  28. password: Optional[str] = None
  29. mobile: Optional[str] = None
  30. name: Optional[str] = None
  31. english_name: Optional[str] = None
  32. status: Optional[str] = None
  33. role: Optional[str] = None
  34. is_deleted: Optional[int] = None
  35. admin_password: Optional[str] = None
  36. class UserSyncRequest(BaseModel):
  37. mobile: str
  38. name: Optional[str] = None
  39. english_name: Optional[str] = None
  40. password: Optional[str] = None
  41. status: Optional[str] = None
  42. mapped_key: Optional[str] = None # External User ID
  43. mapped_email: Optional[str] = None # External User Email
  44. is_active: Optional[bool] = None # True=Active, False=Disabled. None=No Change
  45. sync_action: Optional[str] = "UPSERT"
  46. class UserInDBBase(UserBase):
  47. id: int
  48. created_at: datetime
  49. updated_at: datetime
  50. class Config:
  51. from_attributes = True
  52. class User(UserInDBBase):
  53. pass
  54. class UserInDB(UserInDBBase):
  55. password_hash: str
  56. class UserList(BaseModel):
  57. total: int
  58. items: List[User]
  59. class UserSyncSimple(BaseModel):
  60. mobile: str
  61. name: Optional[str] = None
  62. english_name: Optional[str] = None
  63. class Config:
  64. from_attributes = True
  65. class UserSyncList(BaseModel):
  66. total: int
  67. items: List[UserSyncSimple]