Este documento te guía paso a paso para configurar y usar el sistema de predicciones para La Velada del Año V.
Asegúrate de tener configuradas las variables de entorno para Turso:
TURSO_DATABASE_URL=libsql://your-database-url
TURSO_AUTH_TOKEN=your-auth-token
Ejecuta el comando para crear las tablas e inicializar los datos:
pnpm db:init
Este comando:
- ✅ Crea la tabla
predictionspara almacenar el conteo de votos - ✅ Crea la tabla
user_votespara tracking de usuarios - ✅ Inserta registros iniciales para todos los combates con 0 votos
- ✅ Muestra un resumen de lo creado
Comprueba que todo esté funcionando correctamente:
pnpm db:check
Este comando muestra:
- 📊 Estadísticas de las tablas
- 🥊 Predicciones por combate
- 👑 Top luchadores y combates
- 🔍 Estado de integridad de datos
Para probar la funcionalidad completa:
pnpm db:test
Este script simula:
- 👥 5 usuarios votando en diferentes combates
- 🔄 Cambios de voto
- 📊 Cálculo de porcentajes
- ✅ Verificación de integridad
| 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 |
# Todas las predicciones
GET /api/predictions
# Predicciones de un combate específico
GET /api/predictions?combat_id=1-peereira-vs-rivaldios
Respuesta:
{
"combat_id": "1-peereira-vs-rivaldios",
"predictions": [
{
"fighter_id": "peereira",
"votes": 150,
"percentage": 60
},
{
"fighter_id": "rivaldios",
"votes": 100,
"percentage": 40
}
],
"total_votes": 250
}
POST /api/predictions
Content-Type: application/json
{
"combat_id": "1-peereira-vs-rivaldios",
"fighter_id": "peereira"
}
Requisitos:
- 🔐 Usuario autenticado (sesión requerida)
- ✅
combat_idyfighter_idválidos
Respuesta:
{
"message": "Voto registrado correctamente",
"combat_id": "1-peereira-vs-rivaldios",
"fighter_id": "peereira",
"votes": 151
}
- 👤 Cada usuario puede votar una sola vez por combate
- 🔄 Si cambia su voto, se actualiza automáticamente el conteo
⚠️ Si vota por el mismo luchador, recibe confirmación
- 🔗 Los votos se mantienen sincronizados entre tablas
- 📊 Al cambiar un voto, se decrementa el contador anterior
- ✅ Garantiza que los totales sean siempre precisos
- 🔒 No expone información de usuarios en respuestas GET
- 👤 Los votos se asocian automáticamente con el usuario autenticado
| Comando | Descripción |
|---|---|
pnpm db:init |
Crear tablas e inicializar datos |
pnpm db:check |
Verificar estado de la base de datos |
pnpm db:test |
Simular votos de prueba |
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)
);
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)
);
# Exportar predicciones
sqlite3 your-database.db ".dump predictions user_votes" > backup.sql
-- 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:init
Verificar 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.
- Configurar autenticación con auth-astro
- Crear componentes de UI para mostrar predicciones
- Implementar botones de voto interactivos
- Agregar notificaciones de cambios de voto
- Crear dashboard de estadísticas en tiempo real
Si encuentras algún problema:
- Ejecuta
pnpm db:checkpara diagnosticar - Revisa los logs del servidor
- Verifica las variables de entorno
- Consulta la documentación completa en
DATABASE_PREDICTIONS.md
¡El sistema de predicciones está listo para La Velada del Año V! 🥊✨