2024-11-24 17:27:55 -06:00

76 lines
2.5 KiB
TypeScript

import { createClient } from '@supabase/supabase-js'
import { NextResponse } from 'next/server'
const facilityTypes = {
0: "OBS",
1: "FSS",
2: "DEL",
3: "GND",
4: "TWR",
5: "APP",
6: "CTR",
} as const;
// Define FIR coverage
const CZQM_AIRPORTS = ["CYHZ", "CYFC", "CYQM", "CYSJ", "CYZX", "CYYG", "CYYT", "CYQX", "CYYR", "LFVP", "CYQI", "CYAY", "CYDF", "CYJT"];
export async function GET() {
try {
// Fetch current VATSIM data
const response = await fetch('https://data.vatsim.net/v3/vatsim-data.json');
if (!response.ok) throw new Error('Failed to fetch VATSIM data');
const data = await response.json();
const supabase = createClient(process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.NEXT_SECRET_SUPABASE_KEY)
// Filter controllers in CZQM airspace
const czqmControllers = data.controllers.filter((controller: any) => {
const callsign = controller.callsign;
// console.log(callsign)
return callsign.startsWith('CZQM_') ||
callsign.startsWith('CZQX_') ||
CZQM_AIRPORTS.some(airport => callsign.startsWith(airport));
});
// Process each controller
for (const controller of czqmControllers) {
const facilityType = facilityTypes[controller.facility as keyof typeof facilityTypes];
const airport = CZQM_AIRPORTS.find(ap => controller.callsign.startsWith(ap)) || 'CZQM';
// Insert or update controller session
const { error } = await supabase
.from('controller_sessions')
.upsert({
cid: controller.cid,
name: controller.name,
callsign: controller.callsign,
facility_type: facilityType,
frequency: controller.frequency,
airport: airport,
last_seen: new Date().toISOString(),
logon_time: controller.logon_time,
});
if (error) {
console.error('Error updating controller session:', error);
}
}
// Clean up old sessions (controllers who have logged off)
const fiveMinutesAgo = new Date(Date.now() - 5 * 60 * 1000).toISOString();
const { error: cleanupError } = await supabase
.from('controller_sessions')
.delete()
.lt('last_seen', fiveMinutesAgo);
if (cleanupError) {
console.error('Error cleaning up old sessions:', cleanupError);
}
return NextResponse.json({ success: true });
} catch (error) {
console.error('Error in controller update:', error);
return NextResponse.json({ error: 'Failed to update controller data' }, { status: 500 });
}
}