[docs]classUserBase(BaseModel):"""Base user data that's safe to expose"""username:str=Field(...,min_length=3,max_length=32)email:Optional[EmailStr]created_at:strlast_login:Optional[str]=Noneemail_verified:bool=Falseroles:List[str]=Field(default_factory=lambda:["user"])# Default role is 'user'
[docs]classUserAuth(UserBase):"""User data including auth-sensitive fields"""password_hash:strverification_token:Optional[str]=Noneverification_expires:Optional[str]=None
[docs]classUserCreate(BaseModel):"""Data required to create a new user"""username:str=Field(...,min_length=3,max_length=32,pattern="^[a-zA-Z0-9_]+$")email:EmailStrpassword:str=Field(...,min_length=8)
[docs]classUserInRequest(UserBase):"""User data as attached to request.state.user"""token_data:dict
[docs]classPasswordResetToken(BaseModel):"""Data for password reset tokens"""token:strexpires_at:stris_admin_reset:bool=False