86 lines
2.6 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 ratings = {
"-1": "INA",
"0": "SUS",
"1": "OBS",
"2": "S1",
"3": "S2",
"4": "S3",
"5": "C1",
"6": "C2",
"7": "C3",
"8": "I1",
"9": "I2",
"10": "I3",
"11": "SUP",
"12": "ADM",
}
const CZQM_AIRPORTS = ["CYHZ", "CYFC", "CYQM", "CYSJ", "CYZX", "CYYG", "CYYT", "CYQX", "CYYR", "LFVP", "CYQI", "CYAY", "CYDF", "CYJT"];
export const dynamic = 'force-dynamic'
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_') || 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';
await prisma.controllerSession.upsert({
where: {
id: parseInt(controller.logon_time.replace("-", "").replace("-", "").replace("T", "")) + controller.cid,
},
create: {
id: parseInt(controller.logon_time.replace("-", "").replace("-", "").replace("T", "")) + controller.cid,
cid: String(controller.cid),
name: controller.name,
callsign: controller.callsign,
facilityType: facilityType,
frequency: controller.frequency,
rating: ratings[controller.rating],
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 });
}
}