12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- from datetime import datetime
- from typing import Optional
- import uuid
- from .link import Link
- from pydantic import BaseModel, EmailStr, validator
- from phonenumbers import (
- NumberParseException,
- PhoneNumberFormat,
- PhoneNumberType,
- format_number,
- is_valid_number,
- number_type,
- parse as parse_phone_number,
- )
- MOBILE_NUMBER_TYPES = PhoneNumberType.MOBILE, PhoneNumberType.FIXED_LINE_OR_MOBILE
- # Shared properties
- class CreatorBase(BaseModel):
- account: str
- phone: str
- email: EmailStr
- is_active: Optional[bool] = True
- is_superuser: Optional[bool] = False
- # is_superuser: bool = False
- nick_name: Optional[str] = None
- brief_introduction: Optional[str] = None
- work_experience: Optional[str] = None
- case_type: Optional[str] = None
- created_at: datetime
- updated_at: datetime
- @validator('phone')
- def check_phone(cls, v):
- if v is None:
- return v
- try:
- n = parse_phone_number(v, "TW")
- except NumberParseException as e:
- raise ValueError('Please provide a valid mobile phone number') from e
- if not is_valid_number(n) or number_type(n) not in MOBILE_NUMBER_TYPES:
- raise ValueError('Please provide a valid mobile phone number')
- return format_number(
- n, PhoneNumberFormat.NATIONAL if n.country_code == 886
- else PhoneNumberFormat.INTERNATIONAL)
- class Config:
- orm_mode = True
- # Properties to receive via API on creation
- class CreatorCreate(CreatorBase):
- pwd: str
- # Properties to receive via API on update
- class CreatorUpdate(CreatorBase):
- pwd: Optional[str] = None
- class CreatorInDBBase(CreatorBase):
- id: Optional[str] = None
- class Config:
- orm_mode = True
- # Additional properties to return via API
- class Creator(CreatorInDBBase):
- pass
- # Additional properties stored in DB
- class CreatorInDB(CreatorInDBBase):
- hashed_password: str
|