/** * Copyright (c) 2026 Niolla * All rights reserved. * * This source code is proprietary and confidential. * Unauthorized copying, modification, distribution, or use * of this file, via any medium, is strictly prohibited. */ // app/services/activity.service.js const activityQueue = require("../queues/activity.queue"); const logActivity = async ({ user, description, type = "ACTION", module, eventId, targetType, targetId, requestId, ipAddress, userAgent, metadata, }) => { try { const safeMetadata = metadata && JSON.parse(JSON.stringify(metadata, (key, value) => /password|otp|token|authorization|cookie/i.test(key) ? "[REDACTED]" : value)); const id = eventId || require("crypto").randomUUID(); await activityQueue.add("log-activity", { event_id: id, user_id: user?.id || user?.user_id || null, username: user?.firstName || "System", activity_description: description, module: module, activity_type: type, activity_time: new Date(), activity_date: new Date().toISOString().split("T")[0], target_type: targetType, target_id: targetId, request_id: requestId, ip_address: ipAddress, user_agent: userAgent, metadata: safeMetadata, occurred_at: new Date(), }, { jobId: `activity-${id}` }); } catch (err) { console.error("Queue push error:", err.message); } }; module.exports = { logActivity };