from pydantic import BaseModel, Field from typing import Optional from datetime import datetime, timezone, timedelta from .user import UserResponse class TokenBase(BaseModel): access_token: str refresh_token: Optional[str] = None token_type: str = "bearer" expires_in: int class TokenResponse(TokenBase): user: UserResponse class LoginRequest(BaseModel): username: str = Field(..., min_length=1) password: str = Field(..., min_length=1) class EmailVerifyRequest(BaseModel): email: str class ResetPasswordRequest(BaseModel): token: str new_password: str = Field(..., min_length=8, max_length=100) confirm_password: str class Config: schema_extra = { "example": { "username": "john_doe", "email": "user@example.com" } } class RefreshTokenRequest(BaseModel): refresh_token: str class OAuth2Request(BaseModel): provider: str # google, github, facebook code: str redirect_uri: str