35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { FastifyRequest } from "fastify";
|
|
import prisma from "../config/database";
|
|
import { AuditAction, EntityType, AuthData } from "../types";
|
|
|
|
export async function logAudit(params: {
|
|
request: FastifyRequest;
|
|
authData?: AuthData | null;
|
|
action: AuditAction;
|
|
entityType?: EntityType;
|
|
entityId?: number;
|
|
description?: string;
|
|
oldValues?: Record<string, unknown>;
|
|
newValues?: Record<string, unknown>;
|
|
}): Promise<void> {
|
|
try {
|
|
await prisma.audit_logs.create({
|
|
data: {
|
|
user_id: params.authData?.userId ?? null,
|
|
username: params.authData?.username ?? null,
|
|
user_ip: params.request.ip,
|
|
action: params.action,
|
|
entity_type: params.entityType ?? null,
|
|
entity_id: params.entityId ?? null,
|
|
description: params.description ?? null,
|
|
old_values: params.oldValues ? JSON.stringify(params.oldValues) : null,
|
|
new_values: params.newValues ? JSON.stringify(params.newValues) : null,
|
|
user_agent: params.request.headers["user-agent"] ?? null,
|
|
session_id: null,
|
|
},
|
|
});
|
|
} catch (err) {
|
|
console.error("Failed to write audit log:", err);
|
|
}
|
|
}
|