from typing import Optional from pydantic import BaseModel, EmailStr, Field, field_validator from app.schemas.profile import ProfileRead from .integrations import UserIntegrationRead class UserCreate(BaseModel): username: str = Field(..., max_length=32) email: EmailStr password: str = Field(..., min_length=8) model_config = { "extra": "forbid", } class UserRead(BaseModel): id: int username: str email: Optional[EmailStr] = None google_id: Optional[str] = None avatar_file: Optional[str] = None banner_file: Optional[str] = None has_password: bool premium: bool is_banned: bool is_moderator: bool profile: ProfileRead integrations: Optional[UserIntegrationRead] = None model_config = { "from_attributes": True, } class MeResponse(BaseModel): authenticated: bool user: Optional[UserRead] = None class ChangeUsername(BaseModel): username: str class ChangeEmail(BaseModel): email: EmailStr password: str class ChangePassword(BaseModel): current_password: str = Field(..., min_length=8) new_password: str = Field(..., min_length=8) repeat_password: str = Field(..., min_length=8) class SetPassword(BaseModel): new_password: str = Field(..., min_length=8) repeat_password: str = Field(..., min_length=8) model_config = { "extra": "forbid", }