posLog idle verbessert

This commit is contained in:
PxlLoewe
2025-07-07 04:14:42 -07:00
parent 413be72eca
commit cd2782006d

View File

@@ -3,71 +3,82 @@ import { getServerSession } from "api/auth/[...nextauth]/auth";
import { verify } from "jsonwebtoken"; import { verify } from "jsonwebtoken";
export const PUT = async (req: Request) => { export const PUT = async (req: Request) => {
const session = await getServerSession(); try {
const token = req.headers.get("authorization")?.split(" ")[1]; const session = await getServerSession();
if (!token) return Response.json({ message: "Missing token" }, { status: 401 }); const token = req.headers.get("authorization")?.split(" ")[1];
if (!token) return Response.json({ message: "Missing token" }, { status: 401 });
const payload = await new Promise<User>((resolve, reject) => { const payload = await new Promise<User>((resolve, reject) => {
verify(token, process.env.AUTH_HUB_SECRET as string, (err, decoded) => { verify(token, process.env.AUTH_HUB_SECRET as string, (err, decoded) => {
if (err) { if (err) {
reject(err); reject(err);
} else { } else {
resolve(decoded as User); resolve(decoded as User);
} }
});
}); });
});
if (!session && !payload) return Response.json({ message: "Unauthorized" }, { status: 401 }); if (!session && !payload) return Response.json({ message: "Unauthorized" }, { status: 401 });
const userId = session?.user.id || payload.id; const userId = session?.user.id || payload.id;
const { position, h145 } = (await req.json()) as { const { position, h145 } = (await req.json()) as {
position: PositionLog; position: PositionLog;
h145: boolean; h145: boolean;
}; };
if (!position) { if (!position) {
return Response.json({ message: "Missing id or position" }); return Response.json({ message: "Missing id or position" });
}
const activeAircraft = await prisma.connectedAircraft.findFirst({
where: {
userId,
logoutTime: null,
},
orderBy: {
loginTime: "desc",
},
select: {
id: true,
posLat: true,
posLng: true,
},
});
await prisma.connectedAircraft.update({
where: {
id: activeAircraft?.id,
},
data: {
userId,
lastHeartbeat: new Date(),
posAlt: position.alt,
posLat: position.lat,
posLng: position.lng,
posHeading: position.heading,
posSpeed: position.speed,
posH145active: h145,
},
});
if (!activeAircraft) {
return Response.json({ message: "No active aircraft found" }, { status: 400 });
}
if (activeAircraft.posLat === position.lat && activeAircraft.posLng === position.lng) {
return Response.json({ message: "Position has not changed" }, { status: 400 });
}
const positionLog = await prisma.positionLog.create({
data: {
...position,
connectedAircraftId: activeAircraft.id,
userId,
},
});
return Response.json(positionLog);
} catch (error) {
console.error("Error in PUT /api/position-log:", error);
return Response.json({ message: "Internal Server Error" }, { status: 500 });
} }
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,
connectedAircraftId: activeAircraft.id,
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,
},
});
return Response.json(positionLog);
}; };