39 lines
971 B
TypeScript
39 lines
971 B
TypeScript
import { headers } from "next/headers";
|
|
import { db, StaffActivities } from "@/lib/db";
|
|
|
|
/**
|
|
* Append a staff-action audit entry (AtomCMS StaffActivity). Never throws —
|
|
* logging must not block the action it records.
|
|
*/
|
|
export async function logStaffActivity(opts: {
|
|
staffId: number;
|
|
action: string;
|
|
description: string;
|
|
targetType?: string;
|
|
targetId?: number;
|
|
}): Promise<void> {
|
|
try {
|
|
let ip: string | null = null;
|
|
try {
|
|
const h = await headers();
|
|
ip =
|
|
h.get("x-real-client-ip") ??
|
|
h.get("x-forwarded-for")?.split(",")[0]?.trim() ??
|
|
null;
|
|
} catch {
|
|
ip = null;
|
|
}
|
|
await db.insert(StaffActivities).values({
|
|
userId: BigInt(opts.staffId),
|
|
action: opts.action.slice(0, 50),
|
|
description: opts.description,
|
|
targetType: opts.targetType ?? null,
|
|
targetId: opts.targetId != null ? BigInt(opts.targetId) : null,
|
|
ipAddress: ip,
|
|
createdAt: new Date(),
|
|
});
|
|
} catch {
|
|
// swallow — audit logging is best-effort
|
|
}
|
|
}
|