// app/api/drivers/route.ts // API Route: GET /api/drivers // Returns all connected drivers with their server info import { NextResponse } from 'next/server'; import { query } from '@/lib/db'; import { DriverWithServer } from '@/types/racing'; export async function GET(request: Request) { try { // Parse query params (e.g., ?connected=true) const { searchParams } = new URL(request.url); const connectedOnly = searchParams.get('connected') === 'true'; // SQL query - joins drivers with servers const sql = ` SELECT u.driver_guid, u.driver_name, u.driver_team, u.car_model, u.car_skin, u.cuts_alltime, u.contacts_alltime, u.laps_completed, u.user_rank, u.is_connect, u.is_loading, u.current_server, u.created_at, s.server_id, s.server_name, s.server_track, s.session_type, s.session_flag, s.connected_players FROM users u LEFT JOIN servers s ON u.current_server = s.server_id ${connectedOnly ? 'WHERE u.is_connect = true' : ''} ORDER BY u.user_rank ASC `; const rows = await query(sql); // Transform to proper structure const drivers: DriverWithServer[] = 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, cuts_alltime: row.cuts_alltime, contacts_alltime: row.contacts_alltime, laps_completed: row.laps_completed, user_rank: row.user_rank, is_connect: row.is_connect, is_loading: row.is_loading, current_server: row.current_server, created_at: row.created_at, // Include server info if they're connected server: row.server_id ? { server_id: row.server_id, server_name: row.server_name, server_track: row.server_track, session_type: row.session_type, session_flag: row.session_flag, connected_players: row.connected_players, } : undefined, })); return NextResponse.json({ success: true, data: drivers, count: drivers.length, }); } catch (error) { console.error('Error fetching drivers:', error); return NextResponse.json( { success: false, error: 'Failed to fetch drivers' }, { status: 500 } ); } } // POST endpoint for updating driver data (optional, for future use) export async function POST(request: Request) { try { const body = await request.json(); // Add your update logic here // Example: Update driver rank, stats, etc. return NextResponse.json({ success: true, message: 'Driver updated', }); } catch (error) { console.error('Error updating driver:', error); return NextResponse.json( { success: false, error: 'Failed to update driver' }, { status: 500 } ); } }// app/api/drivers/route.ts // API Route: GET /api/drivers // Returns all connected drivers with their server info import { NextResponse } from 'next/server'; import { query } from '@/lib/db'; import { DriverWithServer } from '@/types/racing'; export async function GET(request: Request) { try { // Parse query params (e.g., ?connected=true) const { searchParams } = new URL(request.url); const connectedOnly = searchParams.get('connected') === 'true'; // SQL query - joins drivers with servers const sql = ` SELECT u.driver_guid, u.driver_name, u.driver_team, u.car_model, u.car_skin, u.cuts_alltime, u.contacts_alltime, u.laps_completed, u.user_rank, u.is_connect, u.is_loading, u.current_server, u.created_at, s.server_id, s.server_name, s.server_track, s.session_type, s.session_flag, s.connected_players FROM users u LEFT JOIN servers s ON u.current_server = s.server_id ${connectedOnly ? 'WHERE u.is_connect = true' : ''} ORDER BY u.user_rank ASC `; const rows = await query(sql); // Transform to proper structure const drivers: DriverWithServer[] = 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, cuts_alltime: row.cuts_alltime, contacts_alltime: row.contacts_alltime, laps_completed: row.laps_completed, user_rank: row.user_rank, is_connect: row.is_connect, is_loading: row.is_loading, current_server: row.current_server, created_at: row.created_at, // Include server info if they're connected server: row.server_id ? { server_id: row.server_id, server_name: row.server_name, server_track: row.server_track, session_type: row.session_type, session_flag: row.session_flag, connected_players: row.connected_players, } : undefined, })); return NextResponse.json({ success: true, data: drivers, count: drivers.length, }); } catch (error) { console.error('Error fetching drivers:', error); return NextResponse.json( { success: false, error: 'Failed to fetch drivers' }, { status: 500 } ); } } // POST endpoint for updating driver data (optional, for future use) export async function POST(request: Request) { try { const body = await request.json(); // Add your update logic here // Example: Update driver rank, stats, etc. return NextResponse.json({ success: true, message: 'Driver updated', }); } catch (error) { console.error('Error updating driver:', error); return NextResponse.json( { success: false, error: 'Failed to update driver' }, { status: 500 } ); } }// app/api/drivers/route.ts // API Route: GET /api/drivers // Returns all connected drivers with their server info import { NextResponse } from 'next/server'; import { query } from '@/lib/db'; import { DriverWithServer } from '@/types/racing'; export async function GET(request: Request) { try { // Parse query params (e.g., ?connected=true) const { searchParams } = new URL(request.url); const connectedOnly = searchParams.get('connected') === 'true'; // SQL query - joins drivers with servers const sql = ` SELECT u.driver_guid, u.driver_name, u.driver_team, u.car_model, u.car_skin, u.cuts_alltime, u.contacts_alltime, u.laps_completed, u.user_rank, u.is_connect, u.is_loading, u.current_server, u.created_at, s.server_id, s.server_name, s.server_track, s.session_type, s.session_flag, s.connected_players FROM users u LEFT JOIN servers s ON u.current_server = s.server_id ${connectedOnly ? 'WHERE u.is_connect = true' : ''} ORDER BY u.user_rank ASC `; const rows = await query(sql); // Transform to proper structure const drivers: DriverWithServer[] = 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, cuts_alltime: row.cuts_alltime, contacts_alltime: row.contacts_alltime, laps_completed: row.laps_completed, user_rank: row.user_rank, is_connect: row.is_connect, is_loading: row.is_loading, current_server: row.current_server, created_at: row.created_at, // Include server info if they're connected server: row.server_id ? { server_id: row.server_id, server_name: row.server_name, server_track: row.server_track, session_type: row.session_type, session_flag: row.session_flag, connected_players: row.connected_players, } : undefined, })); return NextResponse.json({ success: true, data: drivers, count: drivers.length, }); } catch (error) { console.error('Error fetching drivers:', error); return NextResponse.json( { success: false, error: 'Failed to fetch drivers' }, { status: 500 } ); } } // POST endpoint for updating driver data (optional, for future use) export async function POST(request: Request) { try { const body = await request.json(); // Add your update logic here // Example: Update driver rank, stats, etc. return NextResponse.json({ success: true, message: 'Driver updated', }); } catch (error) { console.error('Error updating driver:', error); return NextResponse.json( { success: false, error: 'Failed to update driver' }, { status: 500 } ); } }