Files
voidea/app/schemas/user.py
T

62 lines
1.6 KiB
Python

"""User schemas for VoIdea API."""
from datetime import datetime
from typing import Any, Optional
from pydantic import BaseModel, EmailStr, Field
class UserCreate(BaseModel):
email: EmailStr
password: str = Field(min_length=8, max_length=128)
display_name: str = Field(min_length=1, max_length=255)
accepted_terms: bool = Field(default=True, description="Must accept Terms & Privacy")
class UserUpdate(BaseModel):
display_name: Optional[str] = Field(None, min_length=1, max_length=255)
avatar_url: Optional[str] = None
class UserResponse(BaseModel):
id: str
email: str
display_name: str
avatar_url: Optional[str] = None
is_active: bool
is_superuser: bool
role: str = "user"
is_owner: bool = False
permissions: Optional[dict[str, Any]] = None
accepted_terms_at: Optional[datetime] = None
accepted_terms_version: Optional[str] = None
oauth_provider: Optional[str] = None
created_at: datetime
updated_at: datetime
class ChangePasswordRequest(BaseModel):
current_password: str
new_password: str = Field(min_length=8, max_length=128)
class SubscriptionInfo(BaseModel):
plan_name: str
plan_code: str
status: str
expires_at: Optional[datetime] = None
features: Optional[dict[str, Any]] = None
class VoiceSettingsResponse(BaseModel):
preset: str
overrides: dict[str, Any]
available_presets: list[str]
preset_values: dict[str, Any]
class VoiceSettingsUpdate(BaseModel):
preset: Optional[str] = None
overrides: Optional[dict[str, Any]] = None
reset: Optional[bool] = None