from pydantic import BaseModel, field_validator from typing import Optional, List from datetime import datetime from decimal import Decimal class UserBase(BaseModel): email: str name: str department_id: Optional[str] = None role_id: Optional[str] = None skills: Optional[List[str]] = None capacity: Optional[Decimal] = Decimal("40.00") class UserCreate(UserBase): pass class UserUpdate(BaseModel): name: Optional[str] = None department_id: Optional[str] = None role_id: Optional[str] = None skills: Optional[List[str]] = None capacity: Optional[Decimal] = None is_active: Optional[bool] = None class UserResponse(UserBase): id: str is_active: bool is_system_admin: bool created_at: datetime updated_at: datetime class Config: from_attributes = True class UserInDB(UserResponse): pass class CapacityUpdate(BaseModel): """Schema for updating user's weekly capacity hours.""" capacity_hours: Decimal @field_validator("capacity_hours") @classmethod def validate_capacity_hours(cls, v: Decimal) -> Decimal: """Validate capacity hours is within valid range (0-168).""" if v < 0: raise ValueError("Capacity hours must be non-negative") if v > 168: raise ValueError("Capacity hours cannot exceed 168 (hours in a week)") return v class Config: json_schema_extra = { "example": { "capacity_hours": 40.00 } }