fix cron, add pilot time server update

This commit is contained in:
PxlLoewe
2025-06-02 14:24:37 -07:00
parent 9028eb9c71
commit 72998a36a4
6 changed files with 57 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
import { MissionLog, prisma } from "@repo/db";
import chron from "cron";
import cron from "node-cron";
const removeClosedMissions = async () => {
const oldMissions = await prisma.mission.findMany({
@@ -40,12 +40,10 @@ const removeClosedMissions = async () => {
});
};
const removeClosedMissionsJob = new chron.CronJob(
"*/5 * * * *", // Every 5 minutes
removeClosedMissions,
null,
true,
"Europe/Berlin",
);
removeClosedMissionsJob.start();
cron.schedule("*/5 * * * *", async () => {
try {
await removeClosedMissions();
} catch (error) {
console.error("Error removing closed missions:", error);
}
});

View File

@@ -32,6 +32,7 @@
"express": "^5.1.0",
"jsonwebtoken": "^9.0.2",
"livekit-server-sdk": "^2.13.0",
"node-cron": "^4.1.0",
"nodemailer": "^7.0.3",
"nodemon": "^3.1.10",
"react": "^19.1.0",

View File

@@ -68,7 +68,6 @@ export const handleConnectPilot =
posH145active: true,
},
});
socket.join("dispatchers"); // Join the dispatchers room
socket.join(`user:${userId}`); // Join the user-specific room
socket.join(`station:${stationId}`); // Join the station-specific room

View File

@@ -9,6 +9,7 @@ import {
MissionSdsLog,
MissionStationLog,
Prisma,
PublicUser,
Station,
} from "@repo/db";
import { toast } from "react-hot-toast";
@@ -46,20 +47,32 @@ const FMSStatusHistory = ({
aircraft: ConnectedAircraft & { Station: Station };
mission?: Mission;
}) => {
console.log("FMSStatusHistory", mission?.missionLog);
const log = ((mission?.missionLog as unknown as MissionLog[]) || [])
.filter((entry) => entry.type === "station-log" && entry.data.stationId === aircraft.Station.id)
.reverse()
.splice(0, 6) as MissionStationLog[];
const aircraftUser =
const aircraftUser: PublicUser =
typeof aircraft.publicUser === "string" ? JSON.parse(aircraft.publicUser) : aircraft.publicUser;
return (
<div className="p-4">
<ul className="text-base-content font-semibold">
<li className="flex items-center gap-2 mb-1">
<PersonIcon className="w-5 h-5" /> {aircraftUser.fullName} ({aircraftUser.publicId})
<p className="flex items-center gap-2 flex-1">
<PersonIcon className="w-5 h-5" /> {aircraftUser.fullName} ({aircraftUser.publicId})
</p>
<p className="text-sm font-thin text-gray-500">
{aircraft.esimatedLogoutTime
? `Geplante Abmeldung: ${new Date(aircraft.esimatedLogoutTime).toLocaleTimeString(
[],
{
hour: "2-digit",
minute: "2-digit",
},
)}`
: "Keine geplante Abmeldung"}
</p>
</li>
</ul>
<div className="divider mt-0 mb-0" />

View File

@@ -2,9 +2,11 @@
import { useSession } from "next-auth/react";
import { usePilotConnectionStore } from "_store/pilot/connectionStore";
import { useEffect, useRef, useState } from "react";
import { useQuery } from "@tanstack/react-query";
import { useMutation, useQuery } from "@tanstack/react-query";
import { getStationsAPI } from "_querys/stations";
import toast from "react-hot-toast";
import { editConnectedAircraftAPI } from "_querys/aircrafts";
import { Prisma } from "@repo/db";
export const ConnectionBtn = () => {
const modalRef = useRef<HTMLDialogElement>(null);
@@ -22,6 +24,15 @@ export const ConnectionBtn = () => {
queryKey: ["stations"],
queryFn: () => getStationsAPI(),
});
const aircraftMutation = useMutation({
mutationFn: ({
change,
sessionId,
}: {
sessionId: number;
change: Prisma.ConnectedAircraftUpdateInput;
}) => editConnectedAircraftAPI(sessionId, change),
});
useEffect(() => {
if (stations && stations.length > 0 && form.selectedStationId === null) {
@@ -100,7 +111,7 @@ export const ConnectionBtn = () => {
)}
<fieldset className="fieldset w-full mt-2">
<label className="floating-label w-full text-base">
<span>Logoff Zeit (UTC+1)</span>
<span>Logoff Zeit (LCL)</span>
<input
onChange={(e) => {
const value = e.target.value;
@@ -109,7 +120,16 @@ export const ConnectionBtn = () => {
logoffTime: value,
});
if (logoffDebounce) clearTimeout(logoffDebounce);
const timeout = setTimeout(() => {
const timeout = setTimeout(async () => {
if (!connection.connectedAircraft) return;
await aircraftMutation.mutateAsync({
sessionId: connection.connectedAircraft.id,
change: {
esimatedLogoutTime: value
? new Date(new Date().toDateString() + " " + value).toISOString()
: null,
},
});
toast.success("Änderung gespeichert!");
}, 2000);
setLogoffDebounce(timeout);

9
pnpm-lock.yaml generated
View File

@@ -189,6 +189,9 @@ importers:
livekit-server-sdk:
specifier: ^2.13.0
version: 2.13.0
node-cron:
specifier: ^4.1.0
version: 4.1.0
nodemailer:
specifier: ^7.0.3
version: 7.0.3
@@ -3500,6 +3503,10 @@ packages:
sass:
optional: true
node-cron@4.1.0:
resolution: {integrity: sha512-OS+3ORu+h03/haS6Di8Qr7CrVs4YaKZZOynZwQpyPZDnR3tqRbwJmuP2gVR16JfhLgyNlloAV1VTrrWlRogCFA==}
engines: {node: '>=6.0.0'}
node-releases@2.0.19:
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
@@ -8085,6 +8092,8 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
node-cron@4.1.0: {}
node-releases@2.0.19: {}
nodemailer@6.10.1: