const OError = require('@overleaf/o-error') const { Project } = require('../../models/Project') const MAX_AUDIT_LOG_ENTRIES = 200 module.exports = { promises: { addEntry, }, } /** * Add an audit log entry * * The entry should include at least the following fields: * * - operation: a string identifying the type of operation * - userId: the user on behalf of whom the operation was performed * - message: a string detailing what happened */ async function addEntry(projectId, operation, initiatorId, info = {}) { const timestamp = new Date() const entry = { operation, initiatorId, timestamp, info, } const result = await Project.updateOne( { _id: projectId }, { $push: { auditLog: { $each: [entry], $slice: -MAX_AUDIT_LOG_ENTRIES }, }, } ).exec() if (result.nModified === 0) { throw new OError('project not found', { projectId }) } }