openvpn-endpoint-server/server/app/schemas/user.py

64 lines
1.4 KiB
Python

"""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