from pydantic import BaseModel, EmailStr, Field class RegisterRequest(BaseModel): email: EmailStr password: str = Field(min_length=8) # Accept either `name` (frontend) or `full_name` name: str | None = Field(None, min_length=2, max_length=100) full_name: str | None = Field(None, min_length=2, max_length=100) phone: str | None = None def resolved_name(self) -> str | None: return self.name or self.full_name or None class LoginRequest(BaseModel): email: EmailStr password: str class TokenResponse(BaseModel): access_token: str refresh_token: str token_type: str = "bearer" expires_in: int class RefreshRequest(BaseModel): refresh_token: str class ForgotPasswordRequest(BaseModel): email: EmailStr class ResetPasswordRequest(BaseModel): new_password: str = Field(min_length=8) class ProfileOut(BaseModel): id: str email: str full_name: str | None = None phone: str | None = None role: str class UpdateProfileRequest(BaseModel): full_name: str | None = Field(None, min_length=2, max_length=100) phone: str | None = None