2024-10-01 10:01:25 +08:00
const MaintenanceWindow = require ( "../../models/MaintenanceWindow" );
2024-09-15 08:36:33 +08:00
const SERVICE_NAME = "maintenanceWindowModule" ;
2024-07-29 07:17:22 -07:00
/**
* Asynchronously creates a new MaintenanceWindow document and saves it to the database.
* If the maintenance window is a one-time event, the expiry field is set to the same value as the end field.
* @async
* @function createMaintenanceWindow
* @param {Object} maintenanceWindowData - The data for the new MaintenanceWindow document.
* @param {mongoose.Schema.Types.ObjectId} maintenanceWindowData.monitorId - The ID of the monitor.
* @param {Boolean} maintenanceWindowData.active - Indicates whether the maintenance window is active.
* @param {Boolean} maintenanceWindowData.oneTime - Indicates whether the maintenance window is a one-time event.
* @param {Date} maintenanceWindowData.start - The start date and time of the maintenance window.
* @param {Date} maintenanceWindowData.end - The end date and time of the maintenance window.
* @returns {Promise<MaintenanceWindow>} The saved MaintenanceWindow document.
* @throws {Error} If there is an error saving the document.
* @example
* const maintenanceWindowData = {
* monitorId: 'yourMonitorId',
* active: true,
* oneTime: true,
* start: new Date(),
* end: new Date(),
* };
* createMaintenanceWindow(maintenanceWindowData)
* .then(maintenanceWindow => console.log(maintenanceWindow))
* .catch(error => console.error(error));
*/
const createMaintenanceWindow = async ( maintenanceWindowData ) => {
try {
const maintenanceWindow = new MaintenanceWindow ({
... maintenanceWindowData ,
});
// If the maintenance window is a one time window, set the expiry to the end date
if ( maintenanceWindowData . oneTime ) {
maintenanceWindow . expiry = maintenanceWindowData . end ;
}
const result = maintenanceWindow . save ();
return result ;
} catch ( error ) {
2024-09-15 08:36:33 +08:00
error . service = SERVICE_NAME ;
error . method = "createMaintenanceWindow" ;
2024-07-29 07:17:22 -07:00
throw error ;
}
};
/**
2024-10-04 13:49:53 +08:00
* Asynchronously retrieves all MaintenanceWindow documents associated with a specific team ID.
2024-07-29 07:17:22 -07:00
* @async
* @function getMaintenanceWindowByUserId
2024-10-04 13:49:53 +08:00
* @param {String} teamId - The ID of the team.
* @param {Object} query - The request body.
2024-07-29 07:17:22 -07:00
* @returns {Promise<Array<MaintenanceWindow>>} An array of MaintenanceWindow documents.
* @throws {Error} If there is an error retrieving the documents.
* @example
2024-10-04 13:49:53 +08:00
* getMaintenanceWindowByUserId(teamId)
2024-07-29 07:17:22 -07:00
* .then(maintenanceWindows => console.log(maintenanceWindows))
* .catch(error => console.error(error));
*/
2024-10-04 13:49:53 +08:00
const getMaintenanceWindowsByTeamId = async ( teamId , query ) => {
2024-07-29 07:17:22 -07:00
try {
2024-10-04 13:49:53 +08:00
let { active , page , rowsPerPage , field , order } = query || {};
const maintenanceQuery = { teamId };
if ( active !== undefined ) maintenanceQuery . active = active ;
const maintenanceWindowCount =
await MaintenanceWindow . countDocuments ( maintenanceQuery );
// Pagination
let skip = 0 ;
if ( page && rowsPerPage ) {
skip = page * rowsPerPage ;
}
// Sorting
let sort = {};
if ( field !== undefined && order !== undefined ) {
sort [ field ] = order === "asc" ? 1 : - 1 ;
}
const maintenanceWindows = await MaintenanceWindow . find ( maintenanceQuery )
. skip ( skip )
. limit ( rowsPerPage )
. sort ( sort );
return { maintenanceWindows , maintenanceWindowCount };
2024-07-29 07:17:22 -07:00
} catch ( error ) {
2024-09-15 08:36:33 +08:00
error . service = SERVICE_NAME ;
error . method = "getMaintenanceWindowByUserId" ;
2024-07-29 07:17:22 -07:00
throw error ;
}
};
/**
* Asynchronously retrieves all MaintenanceWindow documents associated with a specific monitor ID.
* @async
* @function getMaintenanceWindowsByMonitorId
* @param {mongoose.Schema.Types.ObjectId} monitorId - The ID of the monitor.
* @returns {Promise<Array<MaintenanceWindow>>} An array of MaintenanceWindow documents.
* @throws {Error} If there is an error retrieving the documents.
* @example
* getMaintenanceWindowsByMonitorId('monitorId')
* .then(maintenanceWindows => console.log(maintenanceWindows))
* .catch(error => console.error(error));
*/
const getMaintenanceWindowsByMonitorId = async ( monitorId ) => {
try {
const maintenanceWindows = await MaintenanceWindow . find ({
monitorId : monitorId ,
});
return maintenanceWindows ;
} catch ( error ) {
2024-09-15 08:36:33 +08:00
error . service = SERVICE_NAME ;
error . method = "getMaintenanceWindowsByMonitorId" ;
2024-07-29 07:17:22 -07:00
throw error ;
}
};
/**
* Asynchronously deletes a MaintenanceWindow document by its ID.
* @async
2024-10-04 13:49:53 +08:00
* @function deleteMaintenanceWindowById
2024-07-29 07:17:22 -07:00
* @param {mongoose.Schema.Types.ObjectId} maintenanceWindowId - The ID of the MaintenanceWindow document to delete.
* @returns {Promise<MaintenanceWindow>} The deleted MaintenanceWindow document.
* @throws {Error} If there is an error deleting the document.
* @example
2024-10-04 13:49:53 +08:00
* deleteMaintenanceWindowById('maintenanceWindowId')
2024-07-29 07:17:22 -07:00
* .then(maintenanceWindow => console.log(maintenanceWindow))
* .catch(error => console.error(error));
*/
2024-10-04 13:49:53 +08:00
const deleteMaintenanceWindowById = async ( maintenanceWindowId ) => {
2024-07-29 07:17:22 -07:00
try {
const maintenanceWindow =
await MaintenanceWindow . findByIdAndDelete ( maintenanceWindowId );
return maintenanceWindow ;
} catch ( error ) {
2024-09-15 08:36:33 +08:00
error . service = SERVICE_NAME ;
2024-10-04 13:49:53 +08:00
error . method = "deleteMaintenanceWindowById" ;
2024-07-29 07:17:22 -07:00
throw error ;
}
};
/**
* Asynchronously deletes all MaintenanceWindow documents associated with a specific monitor ID.
* @async
* @function deleteMaintenanceWindowByMonitorId
* @param {mongoose.Schema.Types.ObjectId} monitorId - The ID of the monitor.
* @returns {Promise<Object>} The result of the delete operation. This object contains information about the operation, such as the number of documents deleted.
* @throws {Error} If there is an error deleting the documents.
* @example
* deleteMaintenanceWindowByMonitorId('monitorId')
* .then(result => console.log(result))
* .catch(error => console.error(error));
*/
const deleteMaintenanceWindowByMonitorId = async ( monitorId ) => {
try {
const result = await MaintenanceWindow . deleteMany ({ monitorId : monitorId });
return result ;
} catch ( error ) {
2024-09-15 08:36:33 +08:00
error . service = SERVICE_NAME ;
error . method = "deleteMaintenanceWindowByMonitorId" ;
2024-07-29 07:17:22 -07:00
throw error ;
}
};
/**
* Asynchronously deletes all MaintenanceWindow documents associated with a specific user ID.
* @async
* @function deleteMaintenanceWindowByUserId
* @param {String} userId - The ID of the user.
* @returns {Promise<Object>} The result of the delete operation. This object contains information about the operation, such as the number of documents deleted.
* @throws {Error} If there is an error deleting the documents.
* @example
* deleteMaintenanceWindowByUserId('userId')
* .then(result => console.log(result))
* .catch(error => console.error(error));
*/
const deleteMaintenanceWindowByUserId = async ( userId ) => {
try {
const result = await MaintenanceWindow . deleteMany ({ userId : userId });
return result ;
} catch ( error ) {
2024-09-15 08:36:33 +08:00
error . service = SERVICE_NAME ;
error . method = "deleteMaintenanceWindowByUserId" ;
2024-07-29 07:17:22 -07:00
throw error ;
}
};
module . exports = {
createMaintenanceWindow ,
2024-10-04 13:49:53 +08:00
getMaintenanceWindowsByTeamId ,
2024-07-29 07:17:22 -07:00
getMaintenanceWindowsByMonitorId ,
2024-10-04 13:49:53 +08:00
deleteMaintenanceWindowById ,
2024-07-29 07:17:22 -07:00
deleteMaintenanceWindowByMonitorId ,
deleteMaintenanceWindowByUserId ,
};