import { NextRequest, NextResponse } from "next/server"; import { prisma } from "@/lib/prisma"; /** * GET /api/players * * Get all players with their user associations * This is a public endpoint (no authentication required) * Supports search query parameter */ export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url) const search = searchParams.get('search') || '' const limit = parseInt(searchParams.get('limit') || '50') const offset = parseInt(searchParams.get('offset') || '0') const where: any = {} if (search) { where.name = { contains: search, mode: 'insensitive' } } const players = await prisma.player.findMany({ where, include: { user: { select: { email: true, }, }, }, orderBy: { currentElo: 'desc' }, take: limit, skip: offset, }); return NextResponse.json(players); } catch (error: unknown) { console.error("Error fetching players:", error); const message = error instanceof Error ? error.message : "Failed to fetch players"; return NextResponse.json( { error: message }, { status: 500 } ); } } /** * POST /api/players * * Create a new player * This is a public endpoint (no authentication required) * Returns 409 if player with same name already exists */ export async function POST(request: Request) { try { const body = await request.json(); const { name } = body; // Validate name if (!name || typeof name !== 'string' || name.trim().length === 0) { return NextResponse.json( { error: "Player name is required" }, { status: 400 } ); } const trimmedName = name.trim(); const normalizedName = trimmedName.toLowerCase(); // Check if player with same name already exists const existingPlayer = await prisma.player.findUnique({ where: { normalizedName }, }); if (existingPlayer) { return NextResponse.json( { error: `Player "${trimmedName}" already exists` }, { status: 409 } ); } // Create new player const newPlayer = await prisma.player.create({ data: { name: trimmedName, normalizedName, currentElo: 1000, gamesPlayed: 0, wins: 0, losses: 0, }, }); return NextResponse.json( { success: true, player: newPlayer }, { status: 201 } ); } catch (error: unknown) { console.error("Error creating player:", error); const message = error instanceof Error ? error.message : "Failed to create player"; return NextResponse.json( { error: message }, { status: 500 } ); } }