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
259 lines
10 KiB
SQL
259 lines
10 KiB
SQL
-- CreateTable
|
|
CREATE TABLE "tournaments" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"type" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL,
|
|
"allowedLevels" TEXT NOT NULL,
|
|
"maxParticipants" INTEGER NOT NULL,
|
|
"registrationStartDate" DATETIME NOT NULL,
|
|
"registrationEndDate" DATETIME NOT NULL,
|
|
"startDate" DATETIME NOT NULL,
|
|
"endDate" DATETIME NOT NULL,
|
|
"courtIds" TEXT NOT NULL,
|
|
"price" INTEGER NOT NULL DEFAULT 0,
|
|
"status" TEXT NOT NULL DEFAULT 'DRAFT',
|
|
"createdById" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "tournaments_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "tournament_participants" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"tournamentId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"registrationDate" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"paymentStatus" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"seed" INTEGER,
|
|
"status" TEXT NOT NULL DEFAULT 'REGISTERED',
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "tournament_participants_tournamentId_fkey" FOREIGN KEY ("tournamentId") REFERENCES "tournaments" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "tournament_participants_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "tournament_matches" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"tournamentId" TEXT NOT NULL,
|
|
"round" INTEGER NOT NULL,
|
|
"matchNumber" INTEGER NOT NULL,
|
|
"position" INTEGER NOT NULL,
|
|
"team1Player1Id" TEXT,
|
|
"team1Player2Id" TEXT,
|
|
"team2Player1Id" TEXT,
|
|
"team2Player2Id" TEXT,
|
|
"courtId" TEXT,
|
|
"scheduledDate" DATETIME,
|
|
"scheduledTime" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"team1Score" INTEGER,
|
|
"team2Score" INTEGER,
|
|
"winner" TEXT,
|
|
"nextMatchId" TEXT,
|
|
"confirmedBy" TEXT NOT NULL DEFAULT '[]',
|
|
"metadata" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "tournament_matches_tournamentId_fkey" FOREIGN KEY ("tournamentId") REFERENCES "tournaments" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "tournament_matches_team1Player1Id_fkey" FOREIGN KEY ("team1Player1Id") REFERENCES "tournament_participants" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "tournament_matches_team1Player2Id_fkey" FOREIGN KEY ("team1Player2Id") REFERENCES "tournament_participants" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "tournament_matches_team2Player1Id_fkey" FOREIGN KEY ("team2Player1Id") REFERENCES "tournament_participants" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "tournament_matches_team2Player2Id_fkey" FOREIGN KEY ("team2Player2Id") REFERENCES "tournament_participants" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "tournament_matches_courtId_fkey" FOREIGN KEY ("courtId") REFERENCES "courts" ("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
|
CONSTRAINT "tournament_matches_nextMatchId_fkey" FOREIGN KEY ("nextMatchId") REFERENCES "tournament_matches" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "leagues" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"type" TEXT NOT NULL DEFAULT 'TEAM_LEAGUE',
|
|
"format" TEXT NOT NULL DEFAULT 'DOUBLE_ROUND_ROBIN',
|
|
"matchesPerMatchday" INTEGER NOT NULL DEFAULT 2,
|
|
"startDate" DATETIME,
|
|
"endDate" DATETIME,
|
|
"status" TEXT NOT NULL DEFAULT 'DRAFT',
|
|
"createdById" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "leagues_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "league_teams" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"leagueId" TEXT NOT NULL,
|
|
"captainId" TEXT NOT NULL,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "league_teams_leagueId_fkey" FOREIGN KEY ("leagueId") REFERENCES "leagues" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "league_teams_captainId_fkey" FOREIGN KEY ("captainId") REFERENCES "users" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "league_team_members" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"teamId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"joinedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "league_team_members_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "league_teams" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "league_team_members_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "league_matches" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"leagueId" TEXT NOT NULL,
|
|
"matchday" INTEGER NOT NULL,
|
|
"team1Id" TEXT NOT NULL,
|
|
"team2Id" TEXT NOT NULL,
|
|
"courtId" TEXT,
|
|
"scheduledDate" DATETIME,
|
|
"scheduledTime" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'SCHEDULED',
|
|
"team1Score" INTEGER,
|
|
"team2Score" INTEGER,
|
|
"setDetails" TEXT,
|
|
"winner" TEXT,
|
|
"completedAt" DATETIME,
|
|
"notes" TEXT,
|
|
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "league_matches_leagueId_fkey" FOREIGN KEY ("leagueId") REFERENCES "leagues" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "league_matches_team1Id_fkey" FOREIGN KEY ("team1Id") REFERENCES "league_teams" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "league_matches_team2Id_fkey" FOREIGN KEY ("team2Id") REFERENCES "league_teams" ("id") ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT "league_matches_courtId_fkey" FOREIGN KEY ("courtId") REFERENCES "courts" ("id") ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "league_standings" (
|
|
"id" TEXT NOT NULL PRIMARY KEY,
|
|
"leagueId" TEXT NOT NULL,
|
|
"teamId" TEXT NOT NULL,
|
|
"matchesPlayed" INTEGER NOT NULL DEFAULT 0,
|
|
"matchesWon" INTEGER NOT NULL DEFAULT 0,
|
|
"matchesLost" INTEGER NOT NULL DEFAULT 0,
|
|
"matchesDrawn" INTEGER NOT NULL DEFAULT 0,
|
|
"setsFor" INTEGER NOT NULL DEFAULT 0,
|
|
"setsAgainst" INTEGER NOT NULL DEFAULT 0,
|
|
"gamesFor" INTEGER NOT NULL DEFAULT 0,
|
|
"gamesAgainst" INTEGER NOT NULL DEFAULT 0,
|
|
"points" INTEGER NOT NULL DEFAULT 0,
|
|
"position" INTEGER NOT NULL DEFAULT 0,
|
|
"updatedAt" DATETIME NOT NULL,
|
|
CONSTRAINT "league_standings_leagueId_fkey" FOREIGN KEY ("leagueId") REFERENCES "leagues" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT "league_standings_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "league_teams" ("id") ON DELETE CASCADE ON UPDATE CASCADE
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournaments_status_idx" ON "tournaments"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournaments_createdById_idx" ON "tournaments"("createdById");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournaments_startDate_idx" ON "tournaments"("startDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournaments_registrationStartDate_idx" ON "tournaments"("registrationStartDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_participants_tournamentId_idx" ON "tournament_participants"("tournamentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_participants_userId_idx" ON "tournament_participants"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_participants_paymentStatus_idx" ON "tournament_participants"("paymentStatus");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_participants_status_idx" ON "tournament_participants"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "tournament_participants_tournamentId_userId_key" ON "tournament_participants"("tournamentId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_matches_tournamentId_idx" ON "tournament_matches"("tournamentId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_matches_round_idx" ON "tournament_matches"("round");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_matches_status_idx" ON "tournament_matches"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_matches_courtId_idx" ON "tournament_matches"("courtId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_matches_nextMatchId_idx" ON "tournament_matches"("nextMatchId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "tournament_matches_tournamentId_round_idx" ON "tournament_matches"("tournamentId", "round");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "leagues_status_idx" ON "leagues"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "leagues_createdById_idx" ON "leagues"("createdById");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "leagues_startDate_idx" ON "leagues"("startDate");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_teams_leagueId_idx" ON "league_teams"("leagueId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_teams_captainId_idx" ON "league_teams"("captainId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "league_teams_leagueId_name_key" ON "league_teams"("leagueId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_team_members_teamId_idx" ON "league_team_members"("teamId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_team_members_userId_idx" ON "league_team_members"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "league_team_members_teamId_userId_key" ON "league_team_members"("teamId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_matches_leagueId_idx" ON "league_matches"("leagueId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_matches_matchday_idx" ON "league_matches"("matchday");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_matches_team1Id_idx" ON "league_matches"("team1Id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_matches_team2Id_idx" ON "league_matches"("team2Id");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_matches_status_idx" ON "league_matches"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_matches_scheduledDate_idx" ON "league_matches"("scheduledDate");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "league_standings_teamId_key" ON "league_standings"("teamId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_standings_leagueId_idx" ON "league_standings"("leagueId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_standings_position_idx" ON "league_standings"("position");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "league_standings_points_idx" ON "league_standings"("points");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "league_standings_leagueId_teamId_key" ON "league_standings"("leagueId", "teamId");
|