49 lines
1.5 KiB
TypeScript
49 lines
1.5 KiB
TypeScript
// app/api/events/[event_id]/results/route.ts
|
|
import { query } from '@/lib/db';
|
|
import { NextResponse, NextRequest } from 'next/server';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
export async function GET(
|
|
request: NextRequest,
|
|
context: { params: Promise<{ event_id: string }> }
|
|
) {
|
|
|
|
const { event_id } = await context.params;
|
|
|
|
try {
|
|
const standingsSql = `
|
|
SELECT
|
|
tcs.team_id,
|
|
t.name as team_name,
|
|
tcs.total_points,
|
|
tcs.races_participated,
|
|
tcs.best_finish,
|
|
json_agg(
|
|
json_build_object(
|
|
'driver_guid', u.driver_guid,
|
|
'driver_name', u.driver_name,
|
|
'position', er.position,
|
|
'points_awarded', er.points_awarded,
|
|
'laps_completed', er.laps_completed,
|
|
'dnf', er.dnf
|
|
) ORDER BY er.position ASC
|
|
) as drivers
|
|
FROM team_championship_standings tcs
|
|
JOIN teams t ON tcs.team_id = t.id
|
|
LEFT JOIN event_results er ON tcs.event_id = er.event_id AND tcs.team_id = er.team_id
|
|
LEFT JOIN users u ON er.driver_guid = u.driver_guid
|
|
WHERE tcs.event_id = $1
|
|
GROUP BY tcs.team_id, t.name, tcs.total_points, tcs.races_participated, tcs.best_finish
|
|
ORDER BY tcs.total_points DESC, tcs.best_finish ASC
|
|
`;
|
|
|
|
const standings = await query(standingsSql, [event_id]);
|
|
|
|
return NextResponse.json({ standings });
|
|
} catch (error) {
|
|
console.error('[Event Results API] Error:', error);
|
|
return NextResponse.json({ error: 'Failed to fetch results' }, { status: 500 });
|
|
}
|
|
}
|