import * as plugins from '../plugins.js'; import { ActivityLogManager } from './classes.activitylogmanager.js'; /** * ActivityLog tracks user actions for audit and display purposes */ @plugins.smartdata.Manager() export class ActivityLog extends plugins.smartdata.SmartDataDbDoc< ActivityLog, plugins.idpInterfaces.data.IActivityLog, ActivityLogManager > { // ====== // static // ====== public static async createActivityLog( managerArg: ActivityLogManager, userId: string, action: plugins.idpInterfaces.data.TActivityAction, description: string, metadata?: { ip?: string; userAgent?: string; targetId?: string; targetType?: string; } ) { const activityLog = new managerArg.CActivityLog(); activityLog.id = plugins.smartunique.shortId(); activityLog.data = { userId, action, timestamp: Date.now(), metadata: { description, ...metadata, }, }; await activityLog.save(); return activityLog; } // ======== // INSTANCE // ======== @plugins.smartdata.unI() public id: string; @plugins.smartdata.svDb() public data: plugins.idpInterfaces.data.IActivityLog['data'] = { userId: null, action: null, timestamp: null, metadata: { description: null, }, }; constructor() { super(); } }