2024-11-24 18:44:19 -06:00

69 lines
2.1 KiB
TypeScript

import { NextResponse } from 'next/server'
import { prisma } from '@/lib/prisma'
const facilityTypes = {
0: "OBS",
1: "FSS",
2: "DEL",
3: "GND",
4: "TWR",
5: "APP",
6: "CTR",
} as const;
const CZQM_AIRPORTS = ["CYHZ", "CYFC", "CYQM", "CYSJ", "CYZX", "CYYG", "CYYT", "CYQX", "CYYR", "LFVP", "CYQI", "CYAY", "CYDF", "CYJT", "BOS"];
export async function GET() {
try {
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();
// Filter controllers in CZQM airspace
const czqmControllers = data.controllers.filter((controller: any) => {
const callsign = controller.callsign;
return callsign.startsWith('CZQM_') ||
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';
await prisma.controllerSession.upsert({
where: {
id: parseInt(controller.cid),
},
create: {
cid: String(controller.cid),
name: controller.name,
callsign: controller.callsign,
facilityType: facilityType,
frequency: controller.frequency,
airport: airport,
lastSeen: new Date(),
logonTime: new Date(controller.logon_time),
},
update: {
lastSeen: new Date(),
},
});
}
// Clean up old sessions
const fiveMinutesAgo = new Date(Date.now() - 5 * 60 * 1000);
await prisma.controllerSession.deleteMany({
where: {
lastSeen: {
lt: fiveMinutesAgo,
},
},
});
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 });
}
}