"""User Schemas""" from pydantic import BaseModel, EmailStr, validator from typing import Optional from datetime import datetime from uuid import UUID class UserBase(BaseModel): email: EmailStr display_name: Optional[str] = None role: str = "user" department: Optional[str] = None class UserCreate(UserBase): azure_oid: Optional[str] = None password: Optional[str] = None # Optional for SSO users class UserSignUp(BaseModel): """Schema for user registration""" email: EmailStr password: str display_name: str @validator("password") def validate_password(cls, v): if len(v) < 8: raise ValueError("Password must be at least 8 characters") return v class UserLogin(BaseModel): """Schema for user login""" email: EmailStr password: str class UserUpdate(BaseModel): display_name: Optional[str] = None role: Optional[str] = None department: Optional[str] = None is_active: Optional[bool] = None avatar_url: Optional[str] = None class PasswordChange(BaseModel): """Schema for changing password""" current_password: str new_password: str @validator("new_password") def validate_password(cls, v): if len(v) < 8: raise ValueError("Password must be at least 8 characters") return v class UserResponse(UserBase): id: UUID azure_oid: Optional[str] = None avatar_url: Optional[str] = None is_active: bool last_login_at: Optional[datetime] = None created_at: datetime updated_at: datetime class Config: from_attributes = True class TokenResponse(BaseModel): """Schema for JWT token response""" access_token: str token_type: str = "bearer" expires_in: int user: UserResponse