from __future__ import annotations import uuid from datetime import datetime from pydantic import EmailStr, Field from app.schemas.common import BaseSchema class UserBase(BaseSchema): """Base user fields.""" username: str = Field(..., min_length=3, max_length=150) email: EmailStr full_name: str | None = Field(None, max_length=255) class UserCreate(UserBase): """User creation payload.""" password: str = Field(..., min_length=8, max_length=128) is_active: bool = True is_superuser: bool = False role_names: list[str] = Field(default_factory=list) class UserUpdate(BaseSchema): """User update payload.""" email: EmailStr | None = None full_name: str | None = None is_active: bool | None = None is_superuser: bool | None = None role_names: list[str] | None = None class RoleResponse(BaseSchema): """Role response.""" id: uuid.UUID name: str description: str | None class UserResponse(BaseSchema): """Full user response.""" id: uuid.UUID username: str email: str full_name: str | None is_active: bool is_superuser: bool roles: list[RoleResponse] = Field(default_factory=list) created_at: datetime updated_at: datetime last_login: datetime | None class UserListResponse(BaseSchema): """Minimal user response for lists.""" id: uuid.UUID username: str email: str full_name: str | None is_active: bool created_at: datetime