from typing import Optional, Dict, Any, List from pydantic import BaseModel, Field, EmailStr class LoginDTO(BaseModel): email: str = Field(..., description="Correo electrónico institucional") password: str = Field(..., min_length=1, description="Contraseña de acceso") class TokenResponseDTO(BaseModel): access_token: str refresh_token: str token_type: str = "Bearer" expires_in: int = 900 # 15 minutos en segundos user: Dict[str, Any] class RefreshTokenDTO(BaseModel): refresh_token: str = Field(..., description="Token de refresco válido")