posLog idle verbessert
This commit is contained in:
@@ -3,71 +3,82 @@ 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 });
|
||||
try {
|
||||
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<User>((resolve, reject) => {
|
||||
verify(token, process.env.AUTH_HUB_SECRET as string, (err, decoded) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else {
|
||||
resolve(decoded as User);
|
||||
}
|
||||
const payload = await new Promise<User>((resolve, reject) => {
|
||||
verify(token, process.env.AUTH_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 });
|
||||
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;
|
||||
};
|
||||
if (!position) {
|
||||
return Response.json({ message: "Missing id or position" });
|
||||
const userId = session?.user.id || payload.id;
|
||||
const { position, h145 } = (await req.json()) as {
|
||||
position: PositionLog;
|
||||
h145: boolean;
|
||||
};
|
||||
if (!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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user