62 lines
1.6 KiB
Python
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
|