import uuid from datetime import datetime from typing import Optional from pydantic import BaseModel, EmailStr, Field class UserRegister(BaseModel): email: EmailStr password: str = Field(min_length=8) name: str = Field(min_length=1, max_length=100) class UserLogin(BaseModel): email: EmailStr password: str class ForgotPasswordRequest(BaseModel): email: EmailStr class ResetPasswordRequest(BaseModel): token: str new_password: str = Field(..., min_length=8) class VerifyEmailRequest(BaseModel): email: EmailStr code: str = Field(..., min_length=6, max_length=6) class ChangePasswordRequest(BaseModel): old_password: str new_password: str = Field(..., min_length=8) class UpdateProfileRequest(BaseModel): name: Optional[str] = None avatar_url: Optional[str] = None class UserResponse(BaseModel): id: str email: str name: str | None = None is_active: bool = True email_verified: bool = False avatar_url: str | None = None created_at: datetime | None = None model_config = {"from_attributes": True} @classmethod def from_user(cls, user) -> "UserResponse": return cls( id=user.id, email=user.email, name=user.name, is_active=user.is_active, email_verified=user.email_verified, avatar_url=user.avatar_url, created_at=user.createdAt if hasattr(user, "createdAt") else None, ) class TokenResponse(BaseModel): access_token: str token_type: str refresh_token: str user: UserResponse class RefreshTokenRequest(BaseModel): refresh_token: str class AccessTokenResponse(BaseModel): access_token: str token_type: str refresh_token: str