51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
|
|
import re
|
||
|
|
from datetime import date
|
||
|
|
from typing import Optional
|
||
|
|
|
||
|
|
from pydantic import BaseModel, Field, field_validator
|
||
|
|
|
||
|
|
|
||
|
|
class AiUserCreate(BaseModel):
|
||
|
|
id: Optional[str] = None
|
||
|
|
name: str = Field(min_length=1, max_length=128)
|
||
|
|
email: str = Field(..., max_length=256)
|
||
|
|
dob: Optional[date] = None
|
||
|
|
gender: Optional[str] = Field(default=None, max_length=10)
|
||
|
|
|
||
|
|
@field_validator("email")
|
||
|
|
def validate_email(cls, v):
|
||
|
|
if not re.match(r"^[^@\s]+@[^@\s]+\.[^@\s]+$", v):
|
||
|
|
raise ValueError("invalid email")
|
||
|
|
return v
|
||
|
|
|
||
|
|
|
||
|
|
class AiUserUpdate(BaseModel):
|
||
|
|
name: Optional[str] = Field(default=None, min_length=1, max_length=128)
|
||
|
|
email: Optional[str] = Field(default=None, max_length=256)
|
||
|
|
dob: Optional[date] = None
|
||
|
|
gender: Optional[str] = Field(default=None, max_length=10)
|
||
|
|
|
||
|
|
@field_validator("email")
|
||
|
|
def validate_email(cls, v):
|
||
|
|
if not re.match(r"^[^@\s]+@[^@\s]+\.[^@\s]+$", v):
|
||
|
|
raise ValueError("invalid email")
|
||
|
|
return v
|
||
|
|
|
||
|
|
|
||
|
|
class AiUserFilter(BaseModel):
|
||
|
|
q: Optional[str] = None
|
||
|
|
name: Optional[str] = None
|
||
|
|
email: Optional[str] = None
|
||
|
|
gender: Optional[str] = None
|
||
|
|
|
||
|
|
dob_from: Optional[date] = None
|
||
|
|
dob_to: Optional[date] = None
|
||
|
|
|
||
|
|
created_from: Optional[str] = None
|
||
|
|
created_to: Optional[str] = None
|
||
|
|
|
||
|
|
page: int = Field(default=0, ge=0)
|
||
|
|
size: int = Field(default=20, ge=1, le=200)
|
||
|
|
sortby: str = "modified"
|
||
|
|
asc: bool = False
|