11from typing import Optional
2- from pydantic import BaseModel
2+ from pydantic import BaseModel , Field , field_validator
33
44from common .core .schemas import BaseCreatorDTO
5+ import re
56
7+ EMAIL_REGEX = re .compile (
8+ r"^[a-zA-Z0-9]+([._-][a-zA-Z0-9]+)*@"
9+ r"([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+"
10+ r"[a-zA-Z]{2,}$"
11+ )
12+ PWD_REGEX = re .compile (
13+ r"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)"
14+ r"(?=.*[~!@#$%^&*()_+\-={}|:\"<>?`\[\];',./])"
15+ r"[A-Za-z\d~!@#$%^&*()_+\-={}|:\"<>?`\[\];',./]{8,20}$"
16+ )
617class model_status (BaseModel ):
718 status : bool
819 ids : list [int ]
@@ -13,11 +24,11 @@ class UserLanguage(BaseModel):
1324
1425
1526class BaseUser (BaseModel ):
16- account : str
27+ account : str = Field ( min_length = 1 , max_length = 100 , description = "用户账号" )
1728 oid : int
18-
29+
1930class BaseUserDTO (BaseUser , BaseCreatorDTO ):
20- language : str
31+ language : str = Field ( pattern = r"^(zh-CN|en)$" , default = "zh-CN" , description = "用户语言" )
2132 password : str
2233 status : int = 1
2334 def to_dict (self ):
@@ -26,12 +37,23 @@ def to_dict(self):
2637 "account" : self .account ,
2738 "oid" : self .oid
2839 }
40+ @field_validator ("language" )
41+ def validate_language (cls , lang : str ) -> str :
42+ if not re .fullmatch (r"^(zh-CN|en)$" , lang ):
43+ raise ValueError ("Language must be 'zh-CN' or 'en'" )
44+ return lang
2945
3046class UserCreator (BaseUser ):
31- name : str
32- email : str
47+ name : str = Field ( min_length = 1 , max_length = 100 , description = "用户名" )
48+ email : str = Field ( min_length = 1 , max_length = 100 , description = "用户邮箱" )
3349 status : int = 1
3450 oid_list : Optional [list [int ]] = None
51+
52+ """ @field_validator("email")
53+ def validate_email(cls, lang: str) -> str:
54+ if not re.fullmatch(EMAIL_REGEX, lang):
55+ raise ValueError("Email format is invalid!")
56+ return lang """
3557
3658class UserEditor (UserCreator , BaseCreatorDTO ):
3759 pass
0 commit comments