113 lines
3.2 KiB
JavaScript
113 lines
3.2 KiB
JavaScript
import config from '../../config.js';
|
|
import { auditLogModel } from '../../database/schemas/management/auditlog.schema.js';
|
|
import log4js from 'log4js';
|
|
import mongoose from 'mongoose';
|
|
import { getModelStats, getModelHistory } from '../../database/database.js';
|
|
|
|
const logger = log4js.getLogger('AuditLogs');
|
|
logger.level = config.server.logLevel;
|
|
|
|
export const listAuditLogsRouteHandler = async (
|
|
req,
|
|
res,
|
|
page = 1,
|
|
limit = 25,
|
|
filter = {},
|
|
sort = '',
|
|
order = 'ascend'
|
|
) => {
|
|
try {
|
|
// Calculate the skip value based on the page number and limit
|
|
const skip = (page - 1) * limit;
|
|
const sortOrder = order === 'descend' ? 1 : -1;
|
|
|
|
if (!sort || sort != '') {
|
|
sort = 'createdAt';
|
|
}
|
|
// Translate parent._id to parent for Mongoose
|
|
if (filter['parent._id']) {
|
|
filter.parent = filter['parent._id'];
|
|
delete filter['parent._id'];
|
|
}
|
|
|
|
// Translate owner._id to parent for Mongoose
|
|
if (filter['owner._id']) {
|
|
filter.owner = filter['owner._id'];
|
|
delete filter['owner._id'];
|
|
}
|
|
|
|
console.log('sort: ', { [sort]: sortOrder });
|
|
|
|
// Use find with population and filter
|
|
let query = auditLogModel
|
|
.find(filter)
|
|
.sort({ [sort]: sortOrder })
|
|
.skip(skip)
|
|
.limit(Number(limit))
|
|
.populate('owner', 'name _id');
|
|
|
|
const auditLogs = await query;
|
|
logger.trace(
|
|
`List of audit logs (Page ${page}, Limit ${limit}, Sort ${sort}, Order ${order}):`,
|
|
auditLogs
|
|
);
|
|
|
|
const expandedIdAuditLogs = auditLogs.map((auditLog) => {
|
|
const expendedAuditLog = { ...auditLog._doc, parent: { _id: auditLog.parent } };
|
|
return expendedAuditLog;
|
|
});
|
|
res.send(expandedIdAuditLogs);
|
|
} catch (error) {
|
|
logger.error('Error listing audit logs:', error);
|
|
res.status(500).send({ error: error });
|
|
}
|
|
};
|
|
|
|
export const getAuditLogRouteHandler = async (req, res) => {
|
|
try {
|
|
// Get ID from params
|
|
const id = new mongoose.Types.ObjectId(req.params.id);
|
|
// Fetch the audit log with the given ID
|
|
const auditLog = await auditLogModel
|
|
.findOne({
|
|
_id: id,
|
|
})
|
|
.populate('printer')
|
|
.populate('owner')
|
|
.populate('parent');
|
|
|
|
if (!auditLog) {
|
|
logger.warn(`Audit log not found with supplied id.`);
|
|
return res.status(404).send({ error: 'Audit log not found.' });
|
|
}
|
|
|
|
logger.trace(`Audit log with ID: ${id}:`, auditLog);
|
|
res.send(auditLog);
|
|
} catch (error) {
|
|
logger.error('Error fetching audit log:', error);
|
|
res.status(500).send({ error: error.message });
|
|
}
|
|
};
|
|
|
|
export const getAuditLogStatsRouteHandler = async (req, res) => {
|
|
const result = await getModelStats({ model: auditLogModel });
|
|
if (result?.error) {
|
|
logger.error('Error fetching audit log stats:', result.error);
|
|
return res.status(result.code).send(result);
|
|
}
|
|
logger.trace('Audit log stats:', result);
|
|
res.send(result);
|
|
};
|
|
|
|
export const getAuditLogHistoryRouteHandler = async (req, res) => {
|
|
const from = req.query.from;
|
|
const to = req.query.to;
|
|
const result = await getModelHistory({ model: auditLogModel, from, to });
|
|
if (result?.error) {
|
|
logger.error('Error fetching audit log history:', result.error);
|
|
return res.status(result.code).send(result);
|
|
}
|
|
logger.trace('Audit log history:', result);
|
|
res.send(result);
|
|
};
|