File size: 839 Bytes
d99646e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | from datetime import datetime
import re
from pydantic import BaseModel, ConfigDict, Field, field_validator
EMAIL_PATTERN = re.compile(r"^[^@\s]+@[^@\s]+\.[^@\s]+$")
class UserBase(BaseModel):
email: str = Field(min_length=3, max_length=255)
full_name: str | None = None
@field_validator("email")
@classmethod
def validate_email(cls, value: str) -> str:
normalized = value.strip().lower()
if not EMAIL_PATTERN.match(normalized):
raise ValueError("Invalid email address")
return normalized
class UserCreate(UserBase):
password: str
class UserRead(UserBase):
id: int
role: str
is_admin: bool
department_id: int | None
department_name: str | None
is_active: bool
created_at: datetime
model_config = ConfigDict(from_attributes=True)
|