64 lines
1.3 KiB
Python
64 lines
1.3 KiB
Python
"""
|
|
Authentication schemas
|
|
"""
|
|
from typing import Optional
|
|
from pydantic import BaseModel, EmailStr
|
|
from pydantic.config import ConfigDict
|
|
|
|
|
|
class UserBase(BaseModel):
|
|
"""Base user schema"""
|
|
username: str
|
|
email: EmailStr
|
|
full_name: Optional[str] = None
|
|
|
|
|
|
class UserCreate(UserBase):
|
|
"""User creation schema"""
|
|
password: str
|
|
|
|
|
|
class UserUpdate(BaseModel):
|
|
"""User update schema"""
|
|
username: Optional[str] = None
|
|
email: Optional[EmailStr] = None
|
|
full_name: Optional[str] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
|
|
class UserResponse(UserBase):
|
|
"""User response schema"""
|
|
id: int
|
|
is_active: bool
|
|
is_admin: bool
|
|
theme_preference: Optional[str] = "light"
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
class ThemePreferenceUpdate(BaseModel):
|
|
"""Theme preference update schema"""
|
|
theme_preference: str
|
|
|
|
|
|
class Token(BaseModel):
|
|
"""Token response schema"""
|
|
access_token: str
|
|
token_type: str
|
|
refresh_token: Optional[str] = None
|
|
|
|
|
|
class TokenData(BaseModel):
|
|
"""Token payload schema"""
|
|
username: Optional[str] = None
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
"""Login request schema"""
|
|
username: str
|
|
password: str
|
|
|
|
|
|
class RefreshRequest(BaseModel):
|
|
"""Refresh token submission"""
|
|
refresh_token: str |