const Check = require("../../../models/Check"); /** * Create a check for a monitor * @async * @param {Object} checkData * @param {string} checkData.monitorId * @param {boolean} checkData.status * @param {number} checkData.responseTime * @param {number} checkData.statusCode * @param {string} checkData.message * @returns {Promise} * @throws {Error} */ const createCheck = async (checkData) => { try { const check = await new Check({ ...checkData }).save(); return check; } catch (error) { throw error; } }; /** * Get all checks for a monitor * @async * @param {string} monitorId * @returns {Promise>} * @throws {Error} */ const getChecks = async (req) => { const filterLookup = { day: new Date(new Date().setDate(new Date().getDate() - 1)), week: new Date(new Date().setDate(new Date().getDate() - 7)), month: new Date(new Date().setMonth(new Date().getMonth() - 1)), }; try { const { monitorId } = req.params; let { sortOrder, limit, filter } = req.query; // Default limit to 0 if not provided if (limit === undefined) limit = 0; // Default sort order is newest -> oldest if (sortOrder === "asc") { sortOrder = 1; } else if (sortOrder === "desc") { sortOrder = -1; } else sortOrder = -1; // Build query const checksQuery = { monitorId: monitorId }; // Filter checks by "day", "week", or "month" if (filter !== undefined) { checksQuery.createdAt = { $gte: filterLookup[filter] }; } const checks = await Check.find(checksQuery) .limit(limit) .sort({ createdAt: sortOrder }); return checks; } catch (error) { throw error; } }; /** * Delete all checks for a monitor * @async * @param {string} monitorId * @returns {number} * @throws {Error} */ const deleteChecks = async (monitorId) => { try { const result = await Check.deleteMany({ monitorId }); return result.deletedCount; } catch (error) { throw error; } }; module.exports = { createCheck, getChecks, deleteChecks };