Completed Admin Users form
This commit is contained in:
@@ -1,4 +1,11 @@
|
||||
import { ConnectedAircraft, getPublicUser, MissionLog, Prisma, prisma } from "@repo/db";
|
||||
import {
|
||||
AdminMessage,
|
||||
ConnectedAircraft,
|
||||
getPublicUser,
|
||||
MissionLog,
|
||||
Prisma,
|
||||
prisma,
|
||||
} from "@repo/db";
|
||||
import { Router } from "express";
|
||||
import { io } from "../index";
|
||||
|
||||
@@ -95,6 +102,7 @@ router.patch("/:id", async (req, res) => {
|
||||
// When change is only the estimated logout time, we don't need to emit an event
|
||||
if (Object.keys(aircraftUpdate).length === 1 && aircraftUpdate.esimatedLogoutTime) return;
|
||||
io.to("dispatchers").emit("update-connectedAircraft", updatedConnectedAircraft);
|
||||
|
||||
io.to(`user:${updatedConnectedAircraft.userId}`).emit(
|
||||
"aircraft-update",
|
||||
updatedConnectedAircraft,
|
||||
@@ -105,18 +113,61 @@ router.patch("/:id", async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Delete a connectedAircraft by ID
|
||||
// Kick a connectedAircraft by ID
|
||||
router.delete("/:id", async (req, res) => {
|
||||
const { id } = req.params;
|
||||
const bann = req.body?.bann as boolean;
|
||||
|
||||
const requiredPermission = bann ? "ADMIN_USER" : "ADMIN_KICK";
|
||||
|
||||
if (!req.user) {
|
||||
res.status(401).json({ error: "Unauthorized" });
|
||||
return;
|
||||
}
|
||||
|
||||
if (!req.user.permissions.includes(requiredPermission)) {
|
||||
res.status(403).json({ error: "Forbidden" });
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await prisma.connectedAircraft.delete({
|
||||
const aircraft = await prisma.connectedAircraft.update({
|
||||
where: { id: Number(id) },
|
||||
data: { logoutTime: new Date() },
|
||||
include: bann ? { User: true } : undefined,
|
||||
});
|
||||
io.to("dispatchers").emit("delete-connectedAircraft", id);
|
||||
|
||||
if (!aircraft) {
|
||||
res.status(404).json({ error: "ConnectedAircraft not found" });
|
||||
return;
|
||||
}
|
||||
|
||||
const status = bann ? "ban" : "kick";
|
||||
|
||||
io.to(`user:${aircraft.userId}`).emit("notification", {
|
||||
type: "admin-message",
|
||||
message: "Verbindung durch einen Administrator getrennt",
|
||||
status,
|
||||
data: { admin: getPublicUser(req.user) },
|
||||
} as AdminMessage);
|
||||
|
||||
io.in(`user:${aircraft.userId}`).disconnectSockets(true);
|
||||
|
||||
if (bann) {
|
||||
await prisma.user.update({
|
||||
where: { id: aircraft.userId },
|
||||
data: {
|
||||
permissions: {
|
||||
set: req.user.permissions.filter((p) => p !== "PILOT"),
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
res.status(204).send();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
res.status(500).json({ error: "Failed to delete connectedAircraft" });
|
||||
res.status(500).json({ error: "Failed to disconnect pilot" });
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user