creator.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from datetime import datetime
  2. from typing import Optional
  3. import uuid
  4. from .link import Link
  5. from pydantic import BaseModel, EmailStr, validator
  6. from phonenumbers import (
  7. NumberParseException,
  8. PhoneNumberFormat,
  9. PhoneNumberType,
  10. format_number,
  11. is_valid_number,
  12. number_type,
  13. parse as parse_phone_number,
  14. )
  15. MOBILE_NUMBER_TYPES = PhoneNumberType.MOBILE, PhoneNumberType.FIXED_LINE_OR_MOBILE
  16. # Shared properties
  17. class CreatorBase(BaseModel):
  18. account: str
  19. phone: str
  20. email: EmailStr
  21. is_active: Optional[bool] = True
  22. is_superuser: Optional[bool] = False
  23. # is_superuser: bool = False
  24. nick_name: Optional[str] = None
  25. brief_introduction: Optional[str] = None
  26. work_experience: Optional[str] = None
  27. case_type: Optional[str] = None
  28. created_at: datetime
  29. updated_at: datetime
  30. @validator('phone')
  31. def check_phone(cls, v):
  32. if v is None:
  33. return v
  34. try:
  35. n = parse_phone_number(v, "TW")
  36. except NumberParseException as e:
  37. raise ValueError('Please provide a valid mobile phone number') from e
  38. if not is_valid_number(n) or number_type(n) not in MOBILE_NUMBER_TYPES:
  39. raise ValueError('Please provide a valid mobile phone number')
  40. return format_number(
  41. n, PhoneNumberFormat.NATIONAL if n.country_code == 886
  42. else PhoneNumberFormat.INTERNATIONAL)
  43. class Config:
  44. orm_mode = True
  45. # Properties to receive via API on creation
  46. class CreatorCreate(CreatorBase):
  47. pwd: str
  48. # Properties to receive via API on update
  49. class CreatorUpdate(CreatorBase):
  50. pwd: Optional[str] = None
  51. class CreatorInDBBase(CreatorBase):
  52. id: Optional[str] = None
  53. class Config:
  54. orm_mode = True
  55. # Additional properties to return via API
  56. class Creator(CreatorInDBBase):
  57. pass
  58. # Additional properties stored in DB
  59. class CreatorInDB(CreatorInDBBase):
  60. hashed_password: str