"""Pydantic v2 schemas for User responses and mutations.""" from datetime import datetime from typing import Optional from pydantic import BaseModel, EmailStr class UserResponse(BaseModel): """Public representation of a user (returned by API endpoints).""" id: int username: str email: str first_name: Optional[str] = None last_name: Optional[str] = None display_name: Optional[str] = None avatar_url: Optional[str] = None role: str mfa_enabled: bool is_active: bool last_login: Optional[datetime] = None created_at: datetime model_config = {"from_attributes": True} class UserCreate(BaseModel): """Admin-only: create a user directly (bypasses invitation/domain check).""" username: str email: EmailStr password: str role: str = "dak_mitarbeiter" class ProfileUpdate(BaseModel): """Self-service profile update (authenticated user edits own data).""" first_name: Optional[str] = None last_name: Optional[str] = None display_name: Optional[str] = None username: Optional[str] = None email: Optional[EmailStr] = None class UserUpdate(BaseModel): """Admin-only: partial update of user fields.""" username: Optional[str] = None email: Optional[EmailStr] = None role: Optional[str] = None is_active: Optional[bool] = None