Esta documentación describe la configuración y uso de la base de datos de predicciones para La Velada del Año V.
La base de datos utiliza Turso (SQLite en la nube) y requiere las siguientes variables de entorno:
TURSO_DATABASE_URL=libsql://your-database-url
TURSO_AUTH_TOKEN=your-auth-tokenAlmacena el conteo de votos por combate y luchador.
CREATE TABLE predictions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
combat_id TEXT NOT NULL,
fighter_id TEXT NOT NULL,
votes INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE(combat_id, fighter_id)
);Campos:
id: Identificador único autoincrementalcombat_id: ID del combate (ej:1-peereira-vs-rivaldios)fighter_id: ID del luchador (ej:peereira)votes: Número total de votos para este luchador en este combatecreated_at: Fecha de creación del registroupdated_at: Fecha de última actualización
Almacena los votos individuales de cada usuario para evitar duplicados.
CREATE TABLE user_votes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
combat_id TEXT NOT NULL,
fighter_id TEXT NOT NULL,
user_id TEXT NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
UNIQUE(combat_id, user_id)
);Campos:
id: Identificador único autoincrementalcombat_id: ID del combatefighter_id: ID del luchador votadouser_id: ID del usuario que votócreated_at: Fecha del voto
Restricción: Un usuario solo puede votar una vez por combate (UNIQUE en combat_id, user_id)
Para crear las tablas e inicializar los registros por primera vez:
pnpm db:initEste comando:
- Crea las tablas
predictionsyuser_votes - Inserta registros iniciales para todos los combates con 0 votos
- Muestra un resumen de lo que se ha creado
Para verificar el estado actual de la base de datos:
pnpm db:checkEste comando muestra:
- Estadísticas generales de las tablas
- Predicciones por combate con porcentajes
- Top combates y luchadores por votos
- Estado de la integridad de datos
| ID | Combate | Luchadores |
|---|---|---|
1-peereira-vs-rivaldios |
Peereira7 vs Rivaldios | peereira, rivaldios |
2-perxitaa-vs-gaspi |
Perxitaa vs Gaspi | perxitaa, gaspi |
3-abby-vs-roro |
Abby vs Roro | abby, roro |
4-andoni-vs-carlos |
Andoni vs Carlos Belcast | andoni, carlos |
5-alana-vs-arigeli |
Alana vs Ari Geli | alana, arigeli |
6-viruzz-vs-tomas |
Viruzz vs Tomas Mazza | viruzz, tomas |
7-grefg-vs-westcol |
The Grefg vs Westcol | grefg, westcol |
| ID | Nombre | ID | Nombre |
|---|---|---|---|
peereira |
Peereira7 | rivaldios |
Rivaldios |
perxitaa |
Perxitaa | gaspi |
Gaspi |
abby |
Abby | roro |
Roro |
andoni |
Andoni | carlos |
Carlos Belcast |
alana |
Alana | arigeli |
Ari Geli |
viruzz |
Viruzz | tomas |
Tomas Mazza |
grefg |
The Grefg | westcol |
Westcol |
Obtiene todas las predicciones o las de un combate específico.
Parámetros:
combat_id(opcional): ID del combate específico
Ejemplos:
# Todas las predicciones
GET /api/predictions
# Predicciones de un combate específico
GET /api/predictions?combat_id=1-peereira-vs-rivaldiosRegistra un voto para un luchador en un combate.
Cuerpo:
{
"combat_id": "1-peereira-vs-rivaldios",
"fighter_id": "peereira"
}Requisitos:
- Usuario autenticado (sesión requerida)
combat_idyfighter_idválidos
- Cada usuario puede votar una sola vez por combate
- Si intenta votar por el mismo luchador, recibe confirmación
- Si cambia su voto, se actualiza automáticamente el conteo
- Los votos se mantienen sincronizados entre
predictionsyuser_votes - Al cambiar un voto, se decrementa el contador del luchador anterior
- Garantiza que los totales sean siempre precisos
- El sistema no expone información de usuarios en las respuestas GET
- Los votos se asocian automáticamente con el usuario autenticado
# Exportar datos de predicciones
sqlite3 your-database.db ".dump predictions user_votes" > backup.sql# Eliminar votos de usuarios inactivos (ejemplo)
DELETE FROM user_votes WHERE created_at < datetime('now', '-30 days');-- Total de votos por combate
SELECT combat_id, SUM(votes) as total_votes
FROM predictions
GROUP BY combat_id
ORDER BY total_votes DESC;
-- Usuarios más activos
SELECT user_id, COUNT(*) as votes_count
FROM user_votes
GROUP BY user_id
ORDER BY votes_count DESC
LIMIT 10;pnpm db:initVerificar que el usuario tenga una sesión válida en auth-astro.
Verificar que el combat_id esté en la lista de combates disponibles.
Verificar que el fighter_id esté en la lista de luchadores disponibles.
- Agregar el combate en
src/consts/combats.ts - Ejecutar
pnpm db:initpara crear los registros iniciales
- Agregar el luchador en
src/consts/fighters.ts - Actualizar los combates que lo incluyan
- Ejecutar
pnpm db:initpara crear los registros iniciales