71 lines
3.1 KiB
JavaScript
Executable File
71 lines
3.1 KiB
JavaScript
Executable File
import { Router } from "express";
|
|
import { isAllowed } from "../middleware/isAllowed.js";
|
|
import multer from "multer";
|
|
import { fetchMonitorCertificate } from "../controllers/controllerUtils.js";
|
|
import Monitor from "../db/models/Monitor.js";
|
|
import { verifyOwnership } from "../middleware/verifyOwnership.js";
|
|
import { verifyTeamAccess } from "../middleware/verifyTeamAccess.js";
|
|
const upload = multer({
|
|
storage: multer.memoryStorage(), // Store file in memory as Buffer
|
|
});
|
|
|
|
class MonitorRoutes {
|
|
constructor(monitorController) {
|
|
this.router = Router();
|
|
this.monitorController = monitorController;
|
|
this.initRoutes();
|
|
}
|
|
|
|
initRoutes() {
|
|
// Team routes
|
|
this.router.get("/team", this.monitorController.getMonitorsByTeamId);
|
|
this.router.get("/team/with-checks", this.monitorController.getMonitorsWithChecksByTeamId);
|
|
this.router.get("/summary/team", this.monitorController.getMonitorsAndSummaryByTeamId); // TODO should be /team/summary
|
|
|
|
// Uptime routes
|
|
this.router.get("/uptime", this.monitorController.getAllMonitorsWithUptimeStats);
|
|
this.router.get("/uptime/details/:monitorId", this.monitorController.getUptimeDetailsById);
|
|
|
|
// Hardware routes
|
|
this.router.get("/hardware/details/:monitorId", this.monitorController.getHardwareDetailsById);
|
|
|
|
// General monitor routes
|
|
this.router.post("/pause/:monitorId", isAllowed(["admin", "superadmin"]), this.monitorController.pauseMonitor);
|
|
this.router.get("/stats/:monitorId", this.monitorController.getMonitorStatsById);
|
|
|
|
// Util routes
|
|
this.router.get("/resolution/url", isAllowed(["admin", "superadmin"]), this.monitorController.checkEndpointResolution);
|
|
this.router.get("/certificate/:monitorId", (req, res, next) => {
|
|
this.monitorController.getMonitorCertificate(req, res, next, fetchMonitorCertificate);
|
|
});
|
|
|
|
// General monitor CRUD routes
|
|
this.router.get("/", this.monitorController.getAllMonitors);
|
|
this.router.post("/", isAllowed(["admin", "superadmin"]), this.monitorController.createMonitor);
|
|
this.router.delete("/", isAllowed(["superadmin"]), this.monitorController.deleteAllMonitors);
|
|
|
|
// Other static routes
|
|
this.router.post("/demo", isAllowed(["admin", "superadmin"]), this.monitorController.addDemoMonitors);
|
|
this.router.get("/export", isAllowed(["admin", "superadmin"]), this.monitorController.exportMonitorsToCSV);
|
|
this.router.post("/seed", isAllowed(["superadmin"]), this.monitorController.seedDb);
|
|
this.router.post("/bulk", isAllowed(["admin", "superadmin"]), upload.single("csvFile"), this.monitorController.createBulkMonitors);
|
|
this.router.post("/test-email", isAllowed(["admin", "superadmin"]), this.monitorController.sendTestEmail);
|
|
|
|
// Individual monitor CRUD routes
|
|
this.router.get("/:monitorId", this.monitorController.getMonitorById);
|
|
this.router.put("/:monitorId", verifyTeamAccess(Monitor, "monitorId"), isAllowed(["admin", "superadmin"]), this.monitorController.editMonitor);
|
|
this.router.delete(
|
|
"/:monitorId",
|
|
verifyOwnership(Monitor, "monitorId"),
|
|
isAllowed(["admin", "superadmin"]),
|
|
this.monitorController.deleteMonitor
|
|
);
|
|
}
|
|
|
|
getRouter() {
|
|
return this.router;
|
|
}
|
|
}
|
|
|
|
export default MonitorRoutes;
|