""" â’¸AngelaMos | 2025 User model API validation and serialization """ from __future__ import annotations import re from datetime import datetime from pydantic import BaseModel, ConfigDict, EmailStr, Field, field_validator from config import settings class UserCreate(BaseModel): """ Schema for user registration request. """ email: EmailStr password: str = Field( min_length = settings.PASSWORD_MIN_LENGTH, max_length = settings.PASSWORD_MAX_LENGTH, ) @field_validator("password") @classmethod def validate_password_strength(cls, v: str) -> str: """ Validate password meets security requirements """ if not re.search(r"[A-Z]", v): raise ValueError( "Password must contain at least one uppercase letter" ) if not re.search(r"[a-z]", v): raise ValueError( "Password must contain at least one lowercase letter" ) if not re.search(r"[0-9]", v): raise ValueError( "Password must contain at least one number" ) return v class UserLogin(BaseModel): """ Schema for user login request. """ email: EmailStr password: str class UserResponse(BaseModel): """ Schema for user data in API responses. Excludes sensitive fields like hashed_password. """ model_config = ConfigDict(from_attributes = True) id: int email: str is_active: bool created_at: datetime class TokenResponse(BaseModel): """ Schema for JWT token response. """ access_token: str token_type: str = "bearer"