Spaces:
Sleeping
Sleeping
File size: 7,707 Bytes
6dc5ac9 3e6e6a0 30320f7 6a5b62e eb74f92 bead622 6dc5ac9 eb74f92 6dc5ac9 eb74f92 bead622 6dc5ac9 3e6e6a0 30320f7 6a5b62e eb74f92 bead622 6dc5ac9 bead622 98bf1ef 09dd636 98bf1ef 4a81627 98bf1ef 4889299 98bf1ef 4889299 98bf1ef fd0df2b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
"""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
}
class ActionRequest(BaseModel):
"""Modelo para crear/actualizar un registro en la tabla action_call"""
usuario: str = Field(..., max_length=255, description="Nombre de usuario único")
uid: Optional[str] = Field(None, max_length=255, description="UID de Firestore")
displayName: Optional[str] = Field(None, max_length=255, description="Nombre a mostrar")
email: Optional[str] = Field(None, description="Email del usuario")
action_call: Optional[bool] = Field(None, description="Llamada a acción")
trigger_action: Optional[str] = Field(None, max_length=255, description="Trigger de acción")
country_header: Optional[str] = Field(None, max_length=10, description="País del header")
country_ip: Optional[str] = Field(None, max_length=10, description="País de la IP")
creditos: Optional[int] = Field(None, description="Créditos disponibles")
esta_hora: Optional[int] = Field(None, ge=0, description="Usos esta hora")
explicit_counter: Optional[int] = Field(None, ge=0, description="Contador explícito")
fecha_registro: Optional[datetime] = Field(None, description="Fecha de registro")
gaClient: Optional[str] = Field(None, max_length=255, description="Cliente de Google Analytics")
open_use: Optional[bool] = Field(None, description="Uso abierto")
ritmo: Optional[float] = Field(None, description="Ritmo de uso")
streak: Optional[int] = Field(None, ge=0, description="Racha de usos")
ultima_generacion_hora: Optional[datetime] = Field(None, description="Última generación esta hora")
ultimo_uso: Optional[datetime] = Field(None, description="Último uso")
usos: Optional[int] = Field(None, ge=0, description="Total de usos")
class Config:
example = {
"usuario": "moibe",
"uid": "uTHjWOudaUYXDgTDE3zlvlr5QU63",
"displayName": "Moisés Briseño Estrello",
"email": "moi.estrello@gmail.com",
"action_call": True,
"trigger_action": "generacion_imagen",
"country_header": "BR",
"country_ip": "BR",
"creditos": 0,
"esta_hora": 2,
"explicit_counter": 14,
"usos": 201
}
class ActionResponse(BaseModel):
"""Modelo para respuesta de acciones"""
id: int
usuario: str
uid: Optional[str]
displayName: Optional[str]
email: Optional[str]
action_call: Optional[bool]
trigger_action: Optional[str]
country_header: Optional[str]
country_ip: Optional[str]
creditos: Optional[int]
esta_hora: Optional[int]
explicit_counter: Optional[int]
fecha_registro: Optional[datetime]
gaClient: Optional[str]
open_use: Optional[bool]
ritmo: Optional[float]
streak: Optional[int]
ultima_generacion_hora: Optional[datetime]
ultimo_uso: Optional[datetime]
usos: Optional[int]
created_at: datetime
updated_at: datetime
class Config:
example = {
"id": 1,
"usuario": "moibe",
"uid": "uTHjWOudaUYXDgTDE3zlvlr5QU63",
"displayName": "Moisés Briseño Estrello",
"email": "moi.estrello@gmail.com",
"usos": 201,
"created_at": "2025-01-13T10:30:00",
"updated_at": "2025-02-06T15:45:00"
}
class FunelCompraRequest(BaseModel):
"""Modelo para crear/registrar un evento en el funel de compra"""
usuario: str = Field(..., max_length=255, description="Nombre de usuario")
mail: str = Field(..., description="Email del usuario")
accion: str = Field(..., max_length=255, description="Acción realizada en el funel (ej: inicio, visualizacion, intento_compra, compra_exitosa)")
class Config:
example = {
"usuario": "moibe",
"mail": "moi.estrello@gmail.com",
"accion": "compra_exitosa"
}
class FunelCompraResponse(BaseModel):
"""Modelo para respuesta de registros del funel de compra"""
id: int = Field(..., description="ID único del registro")
usuario: str
mail: str
accion: str
created_at: datetime
class Config:
example = {
"id": 1,
"usuario": "moibe",
"mail": "moi.estrello@gmail.com",
"accion": "compra_exitosa",
"created_at": "2026-02-11T10:30:00"
}
|