63 lines
1.3 KiB
TypeScript
63 lines
1.3 KiB
TypeScript
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();
|
|
}
|
|
}
|