import pydantic from typing import Union, Optional from enum import Enum from pydantic import BaseModel EMailRegex = pydantic.constr(regex="^[a-zA-Z0-9_-]+@fecr.com.cn$") PasswdRegex = pydantic.constr(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\s\S]{8,16}$") class InfoBase(BaseModel): class InfoEnum(Enum): enum1 = "Success" enum2 = "Failed" info: InfoEnum class DepartEnum(Enum): enum1 = "数字化部" class RoleEnum(Enum): enum1 = "guest" enum2 = "user" enum3 = "admin" class UserBase(BaseModel): email: EMailRegex = "xxxx@fecr.com.cn" name: str = "用户" role: RoleEnum = "guest" depart: Union[DepartEnum, None] = None class Config: use_enum_values = True class UserCreate(UserBase): passwd: PasswdRegex = "8-16字符长度,至少1个大写字母、1个小写字母、1个数字" class UserResetPwd(BaseModel): passwd: PasswdRegex = "8-16字符长度,至少1个大写字母、1个小写字母、1个数字" class UserEdit(BaseModel): email: Optional[EMailRegex] = "xxxx@fecr.com.cn" name: Optional[str] = "用户" role: Optional[RoleEnum] = "guest" depart: Optional[Union[DepartEnum, None]] is_active: Optional[bool] class Config: use_enum_values = True class UserLogin(BaseModel): email: EMailRegex = "xxxx@fecr.com.cn" passwd: PasswdRegex = "8-16字符长度,至少1个大写字母、1个小写字母、1个数字" # verify: str class UserSearch(BaseModel): id: Optional[int] = None email: Optional[str] = None name: Optional[str] = None role: Optional[str] = None depart: Optional[str] = None is_active: Optional[bool] = None class User(UserBase): id: int is_active: bool class Config: orm_mode = True