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