fixed #105
This commit is contained in:
@@ -14,113 +14,118 @@ export const sendAlert = async (
|
|||||||
connectedAircrafts: ConnectedAircraft[];
|
connectedAircrafts: ConnectedAircraft[];
|
||||||
mission: Mission;
|
mission: Mission;
|
||||||
}> => {
|
}> => {
|
||||||
const mission = await prisma.mission.findUnique({
|
try {
|
||||||
where: { id: id },
|
const mission = await prisma.mission.findUnique({
|
||||||
});
|
where: { id: id },
|
||||||
const Stations = await prisma.station.findMany({
|
|
||||||
where: {
|
|
||||||
id: {
|
|
||||||
in: mission?.missionStationIds,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!mission) {
|
|
||||||
throw new Error("Mission not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
// connectedAircrafts the alert is sent to
|
|
||||||
const connectedAircrafts = await prisma.connectedAircraft.findMany({
|
|
||||||
where: {
|
|
||||||
stationId: stationId
|
|
||||||
? stationId
|
|
||||||
: {
|
|
||||||
in: mission.missionStationIds,
|
|
||||||
},
|
|
||||||
logoutTime: null,
|
|
||||||
},
|
|
||||||
include: {
|
|
||||||
Station: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
for (const aircraft of connectedAircrafts) {
|
|
||||||
io.to(`station:${aircraft.stationId}`).emit("mission-alert", {
|
|
||||||
...mission,
|
|
||||||
Stations,
|
|
||||||
});
|
});
|
||||||
io.to(`desktop:${aircraft.userId}`).emit("mission-alert", {
|
const Stations = await prisma.station.findMany({
|
||||||
missionId: mission.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
const user = await prisma.user.findUnique({
|
|
||||||
where: { id: aircraft.userId },
|
|
||||||
});
|
|
||||||
if (!user) continue;
|
|
||||||
if (user.settingsNtfyRoom) {
|
|
||||||
await sendNtfyMission(mission, Stations, aircraft.Station, user.settingsNtfyRoom);
|
|
||||||
}
|
|
||||||
const existingMissionOnStationUser = await prisma.missionOnStationUsers.findFirst({
|
|
||||||
where: {
|
where: {
|
||||||
missionId: mission.id,
|
id: {
|
||||||
userId: aircraft.userId,
|
in: mission?.missionStationIds,
|
||||||
stationId: aircraft.stationId,
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!existingMissionOnStationUser)
|
if (!mission) {
|
||||||
await prisma.missionOnStationUsers.create({
|
throw new Error("Mission not found");
|
||||||
data: {
|
}
|
||||||
|
|
||||||
|
// connectedAircrafts the alert is sent to
|
||||||
|
const connectedAircrafts = await prisma.connectedAircraft.findMany({
|
||||||
|
where: {
|
||||||
|
stationId: stationId
|
||||||
|
? stationId
|
||||||
|
: {
|
||||||
|
in: mission.missionStationIds,
|
||||||
|
},
|
||||||
|
logoutTime: null,
|
||||||
|
},
|
||||||
|
include: {
|
||||||
|
Station: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const aircraft of connectedAircrafts) {
|
||||||
|
io.to(`station:${aircraft.stationId}`).emit("mission-alert", {
|
||||||
|
...mission,
|
||||||
|
Stations,
|
||||||
|
});
|
||||||
|
io.to(`desktop:${aircraft.userId}`).emit("mission-alert", {
|
||||||
|
missionId: mission.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
const user = await prisma.user.findUnique({
|
||||||
|
where: { id: aircraft.userId },
|
||||||
|
});
|
||||||
|
if (!user) continue;
|
||||||
|
if (user.settingsNtfyRoom) {
|
||||||
|
await sendNtfyMission(mission, Stations, aircraft.Station, user.settingsNtfyRoom);
|
||||||
|
}
|
||||||
|
const existingMissionOnStationUser = await prisma.missionOnStationUsers.findFirst({
|
||||||
|
where: {
|
||||||
missionId: mission.id,
|
missionId: mission.id,
|
||||||
userId: aircraft.userId,
|
userId: aircraft.userId,
|
||||||
stationId: aircraft.stationId,
|
stationId: aircraft.stationId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
// for statistics only
|
if (!existingMissionOnStationUser)
|
||||||
await prisma.missionsOnStations
|
await prisma.missionOnStationUsers.create({
|
||||||
.createMany({
|
data: {
|
||||||
data: mission.missionStationIds.map((stationId) => ({
|
missionId: mission.id,
|
||||||
missionId: mission.id,
|
userId: aircraft.userId,
|
||||||
stationId,
|
stationId: aircraft.stationId,
|
||||||
})),
|
},
|
||||||
})
|
});
|
||||||
.catch((err) => {
|
}
|
||||||
// Ignore if the entry already exists
|
|
||||||
});
|
// for statistics only
|
||||||
if (user === "HPG") {
|
await prisma.missionsOnStations
|
||||||
await prisma.mission.update({
|
.createMany({
|
||||||
where: { id: Number(id) },
|
data: mission.missionStationIds.map((stationId) => ({
|
||||||
data: {
|
missionId: mission.id,
|
||||||
state: "running",
|
stationId,
|
||||||
missionLog: {
|
})),
|
||||||
push: {
|
})
|
||||||
type: "alert-log",
|
.catch((err) => {
|
||||||
auto: true,
|
// Ignore if the entry already exists
|
||||||
timeStamp: new Date().toISOString(),
|
});
|
||||||
} as any,
|
if (user === "HPG") {
|
||||||
|
await prisma.mission.update({
|
||||||
|
where: { id: Number(id) },
|
||||||
|
data: {
|
||||||
|
state: "running",
|
||||||
|
missionLog: {
|
||||||
|
push: {
|
||||||
|
type: "alert-log",
|
||||||
|
auto: true,
|
||||||
|
timeStamp: new Date().toISOString(),
|
||||||
|
} as any,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
});
|
||||||
});
|
} else {
|
||||||
} else {
|
await prisma.mission.update({
|
||||||
await prisma.mission.update({
|
where: { id: Number(id) },
|
||||||
where: { id: Number(id) },
|
data: {
|
||||||
data: {
|
state: "running",
|
||||||
state: "running",
|
missionLog: {
|
||||||
missionLog: {
|
push: {
|
||||||
push: {
|
type: "alert-log",
|
||||||
type: "alert-log",
|
auto: false,
|
||||||
auto: false,
|
timeStamp: new Date().toISOString(),
|
||||||
timeStamp: new Date().toISOString(),
|
data: {
|
||||||
data: {
|
stationId: stationId,
|
||||||
stationId: stationId,
|
user: getPublicUser(user, { ignorePrivacy: true }),
|
||||||
user: getPublicUser(user, { ignorePrivacy: true }),
|
},
|
||||||
},
|
} as any,
|
||||||
} as any,
|
},
|
||||||
},
|
},
|
||||||
},
|
});
|
||||||
});
|
}
|
||||||
|
return { connectedAircrafts, mission };
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error sending mission alert:", error);
|
||||||
|
throw new Error("Ein Fehler ist aufgetreten. Bitte melde den Fehler als Bug");
|
||||||
}
|
}
|
||||||
return { connectedAircrafts, mission };
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -50,10 +50,7 @@ const getRthCallsigns = (mission: Mission, stations: Station[]) => {
|
|||||||
return `🚁 RTH${callsigns.length > 1 ? "s" : ""}: ${callsigns.join(" / ")} `;
|
return `🚁 RTH${callsigns.length > 1 ? "s" : ""}: ${callsigns.join(" / ")} `;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getNtfyHeader = (
|
const getNtfyHeader = (mission: Mission, clientStation: Station): NtfyHeader => ({
|
||||||
mission: Mission,
|
|
||||||
clientStation: Station,
|
|
||||||
): NtfyHeader => ({
|
|
||||||
headers: {
|
headers: {
|
||||||
Title: `${clientStation.bosCallsignShort} / ${mission.missionKeywordAbbreviation} / ${mission.missionKeywordCategory}`,
|
Title: `${clientStation.bosCallsignShort} / ${mission.missionKeywordAbbreviation} / ${mission.missionKeywordCategory}`,
|
||||||
Tags: "pager",
|
Tags: "pager",
|
||||||
@@ -76,9 +73,13 @@ export const sendNtfyMission = async (
|
|||||||
clientStation: Station,
|
clientStation: Station,
|
||||||
ntfyRoom: string,
|
ntfyRoom: string,
|
||||||
) => {
|
) => {
|
||||||
axios.post(
|
try {
|
||||||
`https://ntfy.sh/${ntfyRoom}`,
|
await axios.post(
|
||||||
getNtfyData(mission, stations),
|
`https://ntfy.sh/${ntfyRoom}`,
|
||||||
getNtfyHeader(mission, clientStation),
|
getNtfyData(mission, stations),
|
||||||
);
|
getNtfyHeader(mission, clientStation),
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error sending Ntfy mission:", error);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -189,7 +189,11 @@ router.post("/:id/send-alert", async (req, res) => {
|
|||||||
return;
|
return;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
res.status(500).json({ error: "Failed to send mission" });
|
res
|
||||||
|
.status(500)
|
||||||
|
.json({
|
||||||
|
error: `Ein Fehler ist aufgetreten. Bitte melde den Fehler als Bug (${(error as Error).message})`,
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user