saving connection log in DB, added Dispo stats

This commit is contained in:
PxlLoewe
2025-05-03 11:00:15 -07:00
parent 98bbb04095
commit 1d5aa24ebd
14 changed files with 313 additions and 207 deletions

View File

@@ -1,4 +1,4 @@
import { getPublicUser, prisma } from "@repo/db";
import { getPublicUser, prisma, User } from "@repo/db";
import { pubClient } from "modules/redis";
import { Server, Socket } from "socket.io";
@@ -12,15 +12,40 @@ export const handleConnectDispatch =
selectedZone: string;
}) => {
try {
const userId = socket.data.user.id; // User ID aus dem JWT-Token
const user: User = socket.data.user; // User ID aus dem JWT-Token
console.log("User connected to dispatch server");
const user = await prisma.user.findUnique({
if (!user) return Error("User not found");
if (!user.permissions?.includes("DISPO")) {
socket.emit(
"error",
"You do not have permission to connect to the dispatch server.",
);
return;
}
const existingConnection = await prisma.connectedDispatcher.findFirst({
where: {
id: userId,
userId: user.id,
logoutTime: null,
},
});
if (!user) return Error("User not found");
if (existingConnection) {
await io
.to(`user:${user.id}`)
.emit("force-disconnect", "double-connection");
await prisma.connectedDispatcher.updateMany({
where: {
userId: user.id,
logoutTime: null,
},
data: {
logoutTime: new Date().toISOString(),
},
});
}
let parsedLogoffDate = null;
if (logoffTime.length > 0) {
@@ -48,20 +73,14 @@ export const handleConnectDispatch =
publicUser: getPublicUser(user) as any,
esimatedLogoutTime: parsedLogoffDate?.toISOString() || null,
lastHeartbeat: new Date().toISOString(),
userId: userId,
userId: user.id,
loginTime: new Date().toISOString(),
},
});
socket.join("dispatchers"); // Dem Dispatcher-Raum beitreten
socket.join(`user:${userId}`); // Dem User-Raum beitreten
socket.join(`user:${user.id}`); // Dem User-Raum beitreten
/* const keys = await pubClient.keys("Dispatcher:*");
await Promise.all(
keys.map(async (key) => {
return await pubClient.json.get(key);
}),
); */
io.to("dispatchers").emit("dispatcher-update");
io.to("pilots").emit("dispatcher-update");