import logger from '@utils/logger'; export type ActivityEntry = { requestId: string; type: 'created' | 'assignment' | 'approval' | 'rejection' | 'status_change' | 'comment' | 'reminder' | 'document_added' | 'sla_warning'; user?: { userId: string; name?: string; email?: string }; timestamp: string; action: string; details: string; metadata?: any; }; class ActivityService { private byRequest: Map = new Map(); async log(entry: ActivityEntry) { const list = this.byRequest.get(entry.requestId) || []; list.push(entry); this.byRequest.set(entry.requestId, list); // Persist to database try { const { Activity } = require('@models/Activity'); const userName = entry.user?.name || entry.user?.email || null; const activityData = { requestId: entry.requestId, userId: entry.user?.userId || null, userName: userName, activityType: entry.type, activityDescription: entry.details, activityCategory: null, severity: null, metadata: entry.metadata || null, isSystemEvent: !entry.user, ipAddress: null, userAgent: null, }; logger.info(`[Activity] Creating activity:`, { requestId: entry.requestId, userName, userId: entry.user?.userId, type: entry.type }); await Activity.create(activityData); logger.info(`[Activity] Successfully logged activity for request ${entry.requestId} by user: ${userName}`); } catch (error) { logger.error('[Activity] Failed to persist activity:', error); } } get(requestId: string): ActivityEntry[] { return this.byRequest.get(requestId) || []; } } export const activityService = new ActivityService();