import { PositionLog, Prisma, prisma, User } from "@repo/db"; import { getServerSession } from "api/auth/[...nextauth]/auth"; import { verify } from "jsonwebtoken"; export const PUT = async (req: Request) => { const session = await getServerSession(); const token = req.headers.get("authorization")?.split(" ")[1]; if (!token) return Response.json({ message: "Missing token" }, { status: 401 }); const payload = await new Promise((resolve, reject) => { verify(token, process.env.NEXTAUTH_HUB_SECRET as string, (err, decoded) => { if (err) { reject(err); } else { resolve(decoded as User); } }); }); if (!session && !payload) return Response.json({ message: "Unauthorized" }, { status: 401 }); const userId = session?.user.id || payload.id; const { position, h145 } = (await req.json()) as { position: PositionLog; h145: boolean; }; console.log("position", userId); if (!position) { return Response.json({ message: "Missing id or position" }); } console.log("position", position); const activeAircraft = await prisma.connectedAircraft.findFirst({ where: { userId, logoutTime: null, }, orderBy: { loginTime: "desc", }, select: { id: true, }, }); if (!activeAircraft) { return Response.json( { message: "No active aircraft found" }, { status: 400 }, ); } const positionLog = await prisma.positionLog.create({ data: { ...position, userId, }, }); await prisma.connectedAircraft.update({ where: { id: activeAircraft?.id, }, data: { userId, lastHeartbeat: new Date(), posAlt: positionLog.alt, posLat: positionLog.lat, posLng: positionLog.lng, posHeading: positionLog.heading, posSpeed: positionLog.speed, posH145active: h145, positionLogIds: { push: positionLog.id, }, }, }); return Response.json(positionLog); };