70 lines
1.9 KiB
TypeScript

// app/api/dashboard/route.ts
// API endpoint for dashboard data
import { query } from '@/lib/db';
import { NextResponse } from 'next/server';
export const dynamic = 'force-dynamic';
export async function GET() {
try {
const sql = `
SELECT
u.driver_guid,
u.driver_name,
u.driver_team,
u.car_model,
u.car_skin,
u.user_rank,
u.laps_completed,
s.server_id,
s.server_name,
s.server_track,
s.server_config,
s.session_type,
s.session_flag,
s.session_time,
s.session_laps,
s.session_elapsed_time,
s.session_ambient_temp,
s.session_road_temp,
s.connected_players
FROM users u
INNER JOIN servers s ON u.current_server = s.server_id
WHERE u.is_connect = true
ORDER BY s.server_id, u.user_rank ASC
`;
const rows = await query(sql);
const drivers = rows.map((row: any) => ({
driver_guid: row.driver_guid,
driver_name: row.driver_name,
driver_team: row.driver_team,
car_model: row.car_model,
car_skin: row.car_skin,
laps_completed: row.laps_completed,
user_rank: row.user_rank,
server: {
server_id: row.server_id,
server_name: row.server_name,
server_track: row.server_track,
server_config: row.server_config,
session_type: row.session_type,
session_flag: row.session_flag,
session_time: row.session_time,
session_laps: row.session_laps,
session_elapsed_time: row.session_elapsed_time,
session_ambient_temp: row.session_ambient_temp,
session_road_temp: row.session_road_temp,
connected_players: row.connected_players,
},
}));
return NextResponse.json({ drivers });
} catch (error) {
console.error('[Dashboard API] Error:', error);
return NextResponse.json({ error: 'Failed to fetch dashboard data' }, { status: 500 });
}
}