"""User-related Pydantic schemas.""" from datetime import datetime from pydantic import BaseModel, EmailStr, Field from ..models.user import UserRole class UserBase(BaseModel): """Base user schema with common fields.""" username: str = Field(..., min_length=3, max_length=255) email: EmailStr full_name: str | None = None role: UserRole = UserRole.TECHNICIAN class UserCreate(UserBase): """Schema for creating a new user.""" password: str = Field(..., min_length=8) tenant_id: int | None = None class UserUpdate(BaseModel): """Schema for updating a user.""" email: EmailStr | None = None full_name: str | None = None role: UserRole | None = None is_active: bool | None = None password: str | None = Field(None, min_length=8) class UserResponse(UserBase): """Schema for user response.""" id: int tenant_id: int | None is_active: bool last_login: datetime | None created_at: datetime updated_at: datetime | None class Config: from_attributes = True class UserLogin(BaseModel): """Schema for login request.""" username: str password: str class Token(BaseModel): """Schema for JWT token response.""" access_token: str refresh_token: str token_type: str = "bearer" class TokenPayload(BaseModel): """Schema for decoded JWT payload.""" sub: int # user_id username: str role: str tenant_id: int | None exp: datetime