fastapi-mariadb / models.py
Moibe's picture
Nuevo endpoint /guardar-calificacion
bead622
"""Modelos Pydantic para validaci贸n de datos"""
from pydantic import BaseModel, EmailStr, Field
from typing import Optional
from datetime import datetime
class RegistroRequest(BaseModel):
"""Modelo para crear un nuevo registro"""
uid: str = Field(..., max_length=255, description="UID de Firestore")
display_name: str = Field(..., min_length=1, max_length=255, description="Nombre a mostrar")
pais: str = Field(..., min_length=1, max_length=255, description="Pa铆s del usuario")
correo: EmailStr = Field(..., description="Email del usuario")
fecha_registro: Optional[datetime] = Field(None, description="Fecha de registro")
usos: Optional[int] = Field(0, ge=0, description="Cantidad de usos")
prompt: Optional[str] = Field(None, max_length=255, description="Prompt utilizado")
prompt_type: Optional[str] = Field(None, max_length=255, description="Tipo de prompt")
prompt_eval: Optional[str] = Field(None, max_length=255, description="Evaluaci贸n del prompt")
estilo: Optional[str] = Field(None, max_length=255, description="Estilo para la generaci贸n")
estilo_agregado: Optional[str] = Field(None, max_length=255, description="Estilo adicional")
calificacion: Optional[int] = Field(None, ge=0, description="Calificaci贸n num茅rica")
proveedor: Optional[str] = Field(None, max_length=255, description="Proveedor del servicio")
seed: Optional[int] = Field(None, description="Seed para generaci贸n")
class Config:
example = {
"uid": "usuario123",
"display_name": "Juan P茅rez",
"pais": "Espa帽a",
"correo": "juan@example.com",
"prompt": "crear imagen de perro",
"prompt_type": "imagen",
"prompt_eval": "muy buena calidad",
"estilo": "realista",
"estilo_agregado": "alto detalle",
"calificacion": 9,
"proveedor": "openai",
"seed": 12345
}
class RegistroResponse(BaseModel):
"""Modelo para respuesta de registro"""
id: int = Field(..., description="ID 煤nico del registro (auto-incremental)")
uid: str = Field(..., description="UID de Firestore")
display_name: str
pais: str
correo: str
fecha_registro: Optional[datetime]
usos: int
prompt: Optional[str]
prompt_type: Optional[str]
prompt_eval: Optional[str]
estilo: Optional[str]
estilo_agregado: Optional[str]
calificacion: Optional[int]
proveedor: Optional[str]
seed: Optional[int]
created_at: datetime
class Config:
example = {
"id": "550e8400-e29b-41d4-a716-446655440000",
"display_name": "Juan P茅rez",
"pais": "Espa帽a",
"correo": "juan@example.com",
"fecha_registro": "2025-01-13T10:30:00",
"usos": 0,
"prompt": "crear imagen de perro",
"proveedor": "openai",
"seed": 12345,
"created_at": "2025-01-13T10:30:00"
}
class CalificacionRequest(BaseModel):
"""Modelo para actualizar calificaci贸n de un registro"""
id: int = Field(..., gt=0, description="ID del registro a calificar")
calificacion: int = Field(..., ge=0, description="Calificaci贸n num茅rica")
class Config:
example = {
"id": 1,
"calificacion": 8
}