62ac6d1b79
- Add manual team entry for permanent teams in Matchups tab - Rename 'Teams' tab to 'Matchups' for clarity - Implement partner rotation strategies (minimize_repeat, maximize_even, elo_based) - Track partnerships across rounds to minimize repeat pairings - Fix unit tests for team configuration and ELO calculations - Add E2E test for 9+ participant tournaments with variable matchups Key changes: - TeamsSection.tsx: Added router.refresh(), manual team entry, and matchup display - schedule-generator.ts: Enhanced generateVariableRoundRobin to track partnerships - team-generator.ts: Fixed partnership frequency tracking across rounds - API routes: Updated to support variable team durability with rotation strategies
58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { prisma } from "@/lib/prisma";
|
|
import { canManageTournament } from "@/lib/permissions";
|
|
|
|
interface RouteParams {
|
|
params: Promise<{
|
|
id: string;
|
|
}>;
|
|
}
|
|
|
|
/**
|
|
* GET /api/tournaments/[id]/matches
|
|
*
|
|
* Get all matches for a tournament
|
|
*/
|
|
export async function GET(_request: Request, { params }: RouteParams) {
|
|
try {
|
|
const { id } = await params;
|
|
const tournamentId = parseInt(id, 10);
|
|
|
|
if (isNaN(tournamentId)) {
|
|
return NextResponse.json(
|
|
{ error: "Invalid tournament ID" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Check permissions
|
|
const permission = await canManageTournament(tournamentId);
|
|
if (!permission.allowed) {
|
|
return NextResponse.json(
|
|
{ error: permission.reason || 'Insufficient permissions' },
|
|
{ status: 403 }
|
|
);
|
|
}
|
|
|
|
// Get matches for this tournament
|
|
const matches = await prisma.match.findMany({
|
|
where: { eventId: tournamentId },
|
|
include: {
|
|
player1P1: true,
|
|
player1P2: true,
|
|
player2P1: true,
|
|
player2P2: true,
|
|
},
|
|
orderBy: { playedAt: "desc" },
|
|
});
|
|
|
|
return NextResponse.json({ matches });
|
|
} catch (error) {
|
|
console.error("Failed to fetch matches:", error);
|
|
return NextResponse.json(
|
|
{ error: "Failed to fetch matches" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|