from pydantic import BaseModel, Field from datetime import datetime from typing import Optional class UserCreateRequest(BaseModel): """Solicitud para crear un usuario""" nombre: str apellido: str email: str contraseña: Optional[str] = Field( default=None, description="Contraseña del usuario. Si no se proporciona, se usa 'passwd123' por defecto" ) fecha_nacimiento: datetime url_foto_perfil: Optional[str] = None biografia: Optional[str] = None class UserUpdateRequest(BaseModel): """Solicitud para actualizar un usuario""" nombre: Optional[str] = None apellido: Optional[str] = None url_foto_perfil: Optional[str] = None biografia: Optional[str] = None class UserLoginRequest(BaseModel): """Solicitud para login de usuario""" email: str = Field(..., description="Email del usuario") contraseña: str = Field(..., description="Contraseña del usuario") class UserLoginResponse(BaseModel): """Respuesta de login con token JWT""" access_token: str = Field(..., description="Token JWT de acceso") token_type: str = Field(default="bearer", description="Tipo de token") user_id: int = Field(..., description="ID del usuario") email: str = Field(..., description="Email del usuario") is_admin: bool = Field(..., description="Indica si el usuario es administrador") class UserResponse(BaseModel): """Respuesta con datos de usuario""" user_id: int nombre: str apellido: str email: str fecha_nacimiento: datetime fecha_creacion: datetime calificacion: float numero_reportes: int url_foto_perfil: Optional[str] biografia: Optional[str] is_admin: bool class Config: from_attributes = True