52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
const { queueAuditEvent } = require("./redis/dbSync.service")
|
|
|
|
function buildAuditMeta({ entityType, entityId, before = undefined, after = undefined, extra = undefined } = {}) {
|
|
const meta = {}
|
|
if (entityType) meta.entityType = entityType
|
|
if (entityId !== undefined) meta.entityId = entityId
|
|
if (before !== undefined) meta.before = before
|
|
if (after !== undefined) meta.after = after
|
|
if (extra !== undefined) meta.extra = extra
|
|
return meta
|
|
}
|
|
|
|
function normalizeAuditMeta(meta) {
|
|
if (!meta) return null
|
|
if (typeof meta !== "object") return buildAuditMeta({ extra: meta })
|
|
const entityType = meta.entityType
|
|
const entityId = Object.prototype.hasOwnProperty.call(meta, "entityId") ? meta.entityId : undefined
|
|
const before = Object.prototype.hasOwnProperty.call(meta, "before") ? meta.before : undefined
|
|
const after = Object.prototype.hasOwnProperty.call(meta, "after") ? meta.after : undefined
|
|
const extra = Object.prototype.hasOwnProperty.call(meta, "extra") ? meta.extra : undefined
|
|
return buildAuditMeta({ entityType, entityId, before, after, extra })
|
|
}
|
|
|
|
function enqueueAuditEvent({ userId, action, ip, userAgent, meta = null }) {
|
|
if (!userId || !action) return
|
|
const normalizedMeta = normalizeAuditMeta(meta)
|
|
queueAuditEvent({
|
|
userId: Number(userId),
|
|
action,
|
|
ip,
|
|
userAgent,
|
|
meta: normalizedMeta,
|
|
}).catch((err) => console.error("Audit enqueue failed:", err?.message || err))
|
|
}
|
|
|
|
function enqueueAuditFromRequest(req, action, meta = null) {
|
|
if (!req?.auth?.userId) return
|
|
enqueueAuditEvent({
|
|
userId: req.auth.userId,
|
|
action,
|
|
ip: req.ip,
|
|
userAgent: req.headers["user-agent"] || null,
|
|
meta,
|
|
})
|
|
}
|
|
|
|
module.exports = {
|
|
enqueueAuditEvent,
|
|
enqueueAuditFromRequest,
|
|
buildAuditMeta,
|
|
}
|