import { NextResponse } from "next/server"; import { handleApiError } from "@/app/api/_utils"; import { connectToDatabase } from "@/lib/db"; import { serialize } from "@/lib/serialize"; import { playerSchema } from "@/lib/validators"; import { LineupModel } from "@/models/Lineup"; import { PitchingAppearanceModel } from "@/models/PitchingAppearance"; import { PlayerModel } from "@/models/Player"; export const runtime = "nodejs"; export const dynamic = "force-dynamic"; export async function PATCH(request: Request, { params }: { params: Promise<{ id: string }> }) { try { await connectToDatabase(); const { id } = await params; const payload = playerSchema.parse(await request.json()); const player = await PlayerModel.findByIdAndUpdate(id, payload, { new: true, runValidators: true }).lean(); if (!player) { return NextResponse.json({ error: "Player not found." }, { status: 404 }); } return NextResponse.json(serialize(player)); } catch (error) { return handleApiError(error); } } export async function DELETE(_request: Request, { params }: { params: Promise<{ id: string }> }) { try { await connectToDatabase(); const { id } = await params; await Promise.all([ PitchingAppearanceModel.deleteMany({ playerId: id }), LineupModel.updateMany( {}, { $pull: { playerIds: id, bench: id, battingOrder: { playerId: id }, defensiveAssignments: { playerId: id } } } ) ]); const player = await PlayerModel.findByIdAndDelete(id).lean(); if (!player) { return NextResponse.json({ error: "Player not found." }, { status: 404 }); } return NextResponse.json({ success: true }); } catch (error) { return handleApiError(error); } }