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
240 lines
7.2 KiB
Markdown
240 lines
7.2 KiB
Markdown
# Fase 3: Torneos y Ligas
|
|
|
|
## Estado: ✅ COMPLETADA
|
|
|
|
### ✅ Tareas completadas:
|
|
|
|
#### 3.1.1: Creación de Torneos
|
|
- [x] Formulario de creación de torneo
|
|
- [x] Configurar formato (eliminación, liga, suizo, consolación)
|
|
- [x] Definir categorías (masculina, femenina, mixta)
|
|
- [x] Configurar niveles permitidos
|
|
- [x] Establecer fechas y canchas asignadas
|
|
|
|
#### 3.1.2: Inscripciones
|
|
- [x] Inscripción online individual/parejas
|
|
- [x] Pago de inscripción integrado
|
|
- [x] Lista de inscritos visible
|
|
- [x] Cierre de inscripciones automático/manual
|
|
|
|
#### 3.1.3: Sorteos y Cuadros
|
|
- [x] Sorteo automático de emparejamientos
|
|
- [x] Generación de cuadro visual (bracket)
|
|
- [x] Cuadro de consolación automático
|
|
- [x] Publicación de cuadros en la app
|
|
|
|
#### 3.1.4: Gestión de Partidos de Torneo
|
|
- [x] Asignación de horarios y canchas
|
|
- [x] Registro de resultados
|
|
- [x] Avance automático en el cuadro
|
|
- [x] Notificaciones a jugadores
|
|
|
|
#### 3.2.1: Ligas por Equipos
|
|
- [x] Creación de equipos
|
|
- [x] Inscripción de equipos en liga
|
|
- [x] Configurar formato de jornadas
|
|
- [x] Generación automática de calendario
|
|
|
|
#### 3.2.2: Clasificaciones
|
|
- [x] Tabla de clasificación automática
|
|
- [x] Criterios de desempate configurables
|
|
- [x] Estadísticas de equipos (partidos, sets, puntos)
|
|
- [x] 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
|
|
|
|
1. Puntos totales
|
|
2. Diferencia de sets
|
|
3. Diferencia de games
|
|
4. 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
|
|
|
|
```bash
|
|
cd backend
|
|
npm run dev
|
|
```
|
|
|
|
### Crear un torneo (admin)
|
|
```bash
|
|
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
|
|
```bash
|
|
curl -X POST http://localhost:3000/api/v1/tournaments/ID/register \
|
|
-H "Authorization: Bearer TOKEN"
|
|
```
|
|
|
|
### Generar cuadro (admin)
|
|
```bash
|
|
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*
|