Files
OCR/docengine/app/schemas/user.py
2026-06-01 21:49:53 +05:30

70 lines
1.5 KiB
Python

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