69 lines
2.1 KiB
TypeScript
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 });
|
|
}
|
|
} |