diff --git a/Client/src/Pages/Settings/index.jsx b/Client/src/Pages/Settings/index.jsx index 806f29e75..2e59c8187 100644 --- a/Client/src/Pages/Settings/index.jsx +++ b/Client/src/Pages/Settings/index.jsx @@ -33,7 +33,7 @@ const Settings = ({ isAdmin }) => { const { timezone } = useSelector((state) => state.ui); const [checksIsLoading, setChecksIsLoading] = useState(false); const [form, setForm] = useState({ - ttl: (checkTTL / SECONDS_PER_DAY).toString(), + ttl: checkTTL ? (checkTTL / SECONDS_PER_DAY).toString() : 0, }); const [errors, setErrors] = useState({}); const dispatch = useDispatch(); diff --git a/Server/controllers/authController.js b/Server/controllers/authController.js index 4e589ac8a..a58d5e7a9 100644 --- a/Server/controllers/authController.js +++ b/Server/controllers/authController.js @@ -16,7 +16,7 @@ const logger = require("../utils/logger"); require("dotenv").config(); const { errorMessages, successMessages } = require("../utils/messages"); var jwt = require("jsonwebtoken"); -const SERVICE_NAME = "auth"; +const SERVICE_NAME = "AuthController"; const { getTokenFromHeaders } = require("../utils/utils"); /** @@ -466,23 +466,26 @@ const deleteUserController = async (req, res, next) => { const result = await req.db.getMonitorsByTeamId({ params: { teamId: user.teamId }, }); - if (user.role.includes("superadmin") && result?.monitors.length > 0) { + if (user.role.includes("superadmin")) { //2. Remove all jobs, delete checks and alerts - await Promise.all( - monitors.map(async (monitor) => { - await req.jobQueue.deleteJob(monitor); + result?.monitors.length > 0 && + (await Promise.all( + result.monitors.map(async (monitor) => { + await req.jobQueue.deleteJob(monitor); + await req.db.deleteChecks(monitor._id); + await req.db.deletePageSpeedChecksByMonitorId(monitor._id); + await req.db.deleteNotificationsByMonitorId(monitor._id); + }) + )); - await req.db.deleteChecks(monitor._id); - await req.db.deleteAlertByMonitorId(monitor._id); - await req.db.deletePageSpeedChecksByMonitorId(monitor._id); - await req.db.deleteNotificationsByMonitorId(monitor._id); - }) - ); - - // 3. Delete each monitor + // 3. Delete team + await req.db.deleteTeam(user.teamId); + // 4. Delete all other team members + await req.db.deleteAllOtherUsers(); + // 5. Delete each monitor await req.db.deleteMonitorsByUserId(user._id); } - // 4. Delete the user by id + // 6. Delete the user by id await req.db.deleteUser(user._id); return res.status(200).json({ diff --git a/Server/db/mongo/MongoDB.js b/Server/db/mongo/MongoDB.js index 35120c966..8bb51b898 100644 --- a/Server/db/mongo/MongoDB.js +++ b/Server/db/mongo/MongoDB.js @@ -36,6 +36,8 @@ const { getUserByEmail, updateUser, deleteUser, + deleteTeam, + deleteAllOtherUsers, getAllUsers, logoutUser, } = require("./modules/userModule"); @@ -125,6 +127,8 @@ module.exports = { getUserByEmail, updateUser, deleteUser, + deleteTeam, + deleteAllOtherUsers, getAllUsers, logoutUser, requestInviteToken, diff --git a/Server/db/mongo/modules/userModule.js b/Server/db/mongo/modules/userModule.js index e602e84b5..436ff1be5 100644 --- a/Server/db/mongo/modules/userModule.js +++ b/Server/db/mongo/modules/userModule.js @@ -156,6 +156,33 @@ const deleteUser = async (userId) => { } }; +/** + * Delete a user by ID + * @async + * @param {string} teamId + * @returns {void} + * @throws {Error} + */ +const deleteTeam = async (teamId) => { + try { + await TeamModel.findByIdAndDelete(teamId); + } catch (error) { + error.service = SERVICE_NAME; + error.method = "deleteTeam"; + throw error; + } +}; + +const deleteAllOtherUsers = async () => { + try { + await UserModel.deleteMany({ role: { $ne: "superadmin" } }); + } catch (error) { + error.service = SERVICE_NAME; + error.method = "deleteAllOtherUsers"; + throw error; + } +}; + const getAllUsers = async (req, res) => { try { const users = await UserModel.find() @@ -185,6 +212,8 @@ module.exports = { getUserByEmail, updateUser, deleteUser, + deleteTeam, + deleteAllOtherUsers, getAllUsers, logoutUser, };