Implementados 3 módulos con agent swarm: 1. SISTEMA DE TORNEOS - Tipos: Eliminación, Round Robin, Suizo, Consolación - Categorías: Masculina, Femenina, Mixta - Inscripciones con validación de niveles - Gestión de pagos y estados 2. CUADROS Y PARTIDOS - Generación automática de cuadros - Algoritmos: Circle method (Round Robin), Swiss pairing - Avance automático de ganadores - Asignación de canchas y horarios - Registro y confirmación de resultados 3. LIGAS POR EQUIPOS - Creación de equipos con capitán - Calendario round-robin automático - Tabla de clasificación con desempates - Estadísticas por equipo Modelos DB: - Tournament, TournamentParticipant, TournamentMatch - League, LeagueTeam, LeagueTeamMember, LeagueMatch, LeagueStanding Nuevos endpoints: - /tournaments/* - Gestión de torneos - /tournaments/:id/draw/* - Cuadros - /tournaments/:id/matches/* - Partidos de torneo - /leagues/* - Ligas - /league-teams/* - Equipos - /league-schedule/* - Calendario - /league-standings/* - Clasificación - /league-matches/* - Partidos de liga Datos de prueba: - Torneo de Verano 2024 (Eliminatoria) - Liga de Invierno (Round Robin) - Liga de Club 2024
7.2 KiB
7.2 KiB
Fase 3: Torneos y Ligas
Estado: ✅ COMPLETADA
✅ Tareas completadas:
3.1.1: Creación de Torneos
- Formulario de creación de torneo
- Configurar formato (eliminación, liga, suizo, consolación)
- Definir categorías (masculina, femenina, mixta)
- Configurar niveles permitidos
- Establecer fechas y canchas asignadas
3.1.2: Inscripciones
- Inscripción online individual/parejas
- Pago de inscripción integrado
- Lista de inscritos visible
- Cierre de inscripciones automático/manual
3.1.3: Sorteos y Cuadros
- Sorteo automático de emparejamientos
- Generación de cuadro visual (bracket)
- Cuadro de consolación automático
- Publicación de cuadros en la app
3.1.4: Gestión de Partidos de Torneo
- Asignación de horarios y canchas
- Registro de resultados
- Avance automático en el cuadro
- Notificaciones a jugadores
3.2.1: Ligas por Equipos
- Creación de equipos
- Inscripción de equipos en liga
- Configurar formato de jornadas
- Generación automática de calendario
3.2.2: Clasificaciones
- Tabla de clasificación automática
- Criterios de desempate configurables
- Estadísticas de equipos (partidos, sets, puntos)
- Historial de resultados por jornada
📊 Resumen de Implementación
Modelos de Base de Datos
| Modelo | Descripción |
|---|---|
| Tournament | Torneos con tipo, categoría, niveles, fechas |
| TournamentParticipant | Inscripciones con estado de pago |
| TournamentMatch | Partidos de torneo con relaciones de avance |
| League | Ligas por equipos |
| LeagueTeam | Equipos participantes |
| LeagueTeamMember | Miembros de cada equipo |
| LeagueMatch | Partidos de la liga |
| LeagueStanding | Clasificación actualizada automáticamente |
Tipos de Torneo Soportados
| Tipo | Descripción |
|---|---|
| ELIMINATION | Eliminación simple con cuadro |
| ROUND_ROBIN | Todos contra todos |
| SWISS | Sistema suizo sin eliminación |
| CONSOLATION | Cuadro de consolación para perdedores 1ra ronda |
Sistema de Puntos - Ligas
| Resultado | Puntos |
|---|---|
| Victoria | 3 |
| Empate | 1 |
| Derrota | 0 |
Criterios de Desempate
- Puntos totales
- Diferencia de sets
- Diferencia de games
- Enfrentamiento directo
🔌 Endpoints de Torneos
# Gestión de Torneos
GET /api/v1/tournaments - Listar torneos
POST /api/v1/tournaments - Crear torneo (admin)
GET /api/v1/tournaments/:id - Ver torneo
PUT /api/v1/tournaments/:id - Actualizar (admin)
DELETE /api/v1/tournaments/:id - Cancelar (admin)
POST /api/v1/tournaments/:id/open - Abrir inscripciones (admin)
POST /api/v1/tournaments/:id/close - Cerrar inscripciones (admin)
# Inscripciones
POST /api/v1/tournaments/:id/register - Inscribirme
DELETE /api/v1/tournaments/:id/register - Desinscribirme
GET /api/v1/tournaments/:id/participants - Listar participantes
PUT /api/v1/tournaments/participants/:id/pay - Confirmar pago (admin)
# Cuadros y Partidos
POST /api/v1/tournaments/:id/draw/generate - Generar cuadro (admin)
GET /api/v1/tournaments/:id/draw - Ver cuadro
GET /api/v1/tournaments/:id/matches - Listar partidos
GET /api/v1/tournaments/:id/matches/:matchId - Ver partido
PUT /api/v1/tournaments/:id/matches/:matchId/schedule - Programar (admin)
PUT /api/v1/tournaments/:id/matches/:matchId/result - Registrar resultado
PUT /api/v1/tournaments/:id/matches/:matchId/confirm - Confirmar resultado
🔌 Endpoints de Ligas
# Ligas
GET /api/v1/leagues - Listar ligas
POST /api/v1/leagues - Crear liga (admin)
GET /api/v1/leagues/:id - Ver liga
PUT /api/v1/leagues/:id - Actualizar (admin)
DELETE /api/v1/leagues/:id - Eliminar (admin)
POST /api/v1/leagues/:id/start - Iniciar liga (admin)
POST /api/v1/leagues/:id/finish - Finalizar liga (admin)
# Equipos
GET /api/v1/league-teams - Listar equipos
POST /api/v1/league-teams - Crear equipo
GET /api/v1/league-teams/:id - Ver equipo
PUT /api/v1/league-teams/:id - Actualizar equipo (capitán)
DELETE /api/v1/league-teams/:id - Eliminar equipo
POST /api/v1/league-teams/:id/members - Agregar miembro
DELETE /api/v1/league-teams/:id/members/:userId - Quitar miembro
# Calendario
GET /api/v1/league-schedule/:leagueId - Calendario completo
GET /api/v1/league-schedule/:leagueId/matchday/:n - Jornada específica
POST /api/v1/league-schedule/:leagueId/generate - Generar calendario (admin)
PUT /api/v1/league-matches/:id/schedule - Programar partido
# Clasificación
GET /api/v1/league-standings/:leagueId - Tabla de clasificación
GET /api/v1/league-standings/:leagueId/top - Top equipos
# Partidos de Liga
PUT /api/v1/league-matches/:id/result - Registrar resultado
PUT /api/v1/league-matches/:id/confirm - Confirmar resultado
🚀 Cómo probar
cd backend
npm run dev
Crear un torneo (admin)
curl -X POST http://localhost:3000/api/v1/tournaments \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Torneo Test",
"type": "ELIMINATION",
"category": "MIXED",
"maxParticipants": 8,
"price": 2000
}'
Inscribirse en torneo
curl -X POST http://localhost:3000/api/v1/tournaments/ID/register \
-H "Authorization: Bearer TOKEN"
Generar cuadro (admin)
curl -X POST http://localhost:3000/api/v1/tournaments/ID/draw/generate \
-H "Authorization: Bearer TOKEN"
📁 Archivos creados en esta fase
backend/src/
├── services/
│ ├── tournament.service.ts
│ ├── tournamentDraw.service.ts
│ ├── tournamentMatch.service.ts
│ ├── league.service.ts
│ ├── leagueTeam.service.ts
│ ├── leagueSchedule.service.ts
│ ├── leagueStanding.service.ts
│ └── leagueMatch.service.ts
├── controllers/
│ ├── tournament.controller.ts
│ ├── tournamentDraw.controller.ts
│ ├── tournamentMatch.controller.ts
│ ├── league.controller.ts
│ ├── leagueTeam.controller.ts
│ ├── leagueSchedule.controller.ts
│ ├── leagueStanding.controller.ts
│ └── leagueMatch.controller.ts
├── routes/
│ ├── tournament.routes.ts
│ ├── tournamentDraw.routes.ts
│ ├── tournamentMatch.routes.ts
│ ├── league.routes.ts
│ ├── leagueTeam.routes.ts
│ ├── leagueSchedule.routes.ts
│ ├── leagueStanding.routes.ts
│ └── leagueMatch.routes.ts
├── validators/
│ ├── tournament.validator.ts
│ └── league.validator.ts
├── utils/
│ └── tournamentDraw.ts
└── ...
🎯 Datos de prueba creados
| Entidad | Nombre | Descripción |
|---|---|---|
| Torneo | Torneo de Verano 2024 | Eliminación, Mixto, Abierto |
| Torneo | Liga de Invierno | Round Robin, Hombres |
| Liga | Liga de Club 2024 | Liga por equipos |
Completada el: 2026-01-31