"""Pydantic schemas for User endpoints.""" from __future__ import annotations from datetime import datetime from typing import Optional from pydantic import BaseModel, ConfigDict, EmailStr, Field from app.models.user import UserRole class UserOut(BaseModel): """Response schema for a user (never includes password_hash).""" model_config = ConfigDict(from_attributes=True) id: int email: EmailStr name: str role: UserRole org_id: int avatar_url: Optional[str] = None email_notifications: bool = True created_at: datetime class UserUpdate(BaseModel): """Request body for PATCH /api/v1/users/{id} (admin or self).""" name: Optional[str] = Field(None, min_length=1, max_length=255) avatar_url: Optional[str] = Field(None, max_length=1024) email_notifications: Optional[bool] = None role: Optional[UserRole] = None # admin-only class UserCreateRequest(BaseModel): """Request body for POST /api/v1/users (admin-only).""" email: EmailStr password: str = Field(..., min_length=8, max_length=128) name: str = Field(..., min_length=1, max_length=255) role: UserRole = UserRole.sales_rep class UserListResponse(BaseModel): """Response schema for paginated user list.""" items: list[UserOut] total: int page: int page_size: int # Re-export for late import in auth.py __all__ = ["UserCreateRequest", "UserListResponse", "UserOut", "UserUpdate"]