feat: audit logs show user info

This commit is contained in:
2026-02-04 21:44:00 -08:00
parent 800b9f6c2d
commit 4327750d2a
4 changed files with 160 additions and 45 deletions
+40 -1
View File
@@ -74,7 +74,7 @@ export const AuditService = {
}
}
const [logs, total] = await Promise.all([
const [rawLogs, total] = await Promise.all([
prisma.auditLog.findMany({
where,
orderBy: { createdAt: "desc" },
@@ -84,6 +84,45 @@ export const AuditService = {
prisma.auditLog.count({ where }),
]);
// Collect all unique user IDs to fetch
const userIds = new Set<string>();
for (const log of rawLogs) {
if (log.userId) {
userIds.add(log.userId);
}
if (log.targetUserId) {
userIds.add(log.targetUserId);
}
}
// Fetch all users in one query
const users = userIds.size > 0
? await prisma.user.findMany({
where: { id: { in: Array.from(userIds) } },
select: { id: true, username: true, avatar: true },
})
: [];
// Create a lookup map
const userMap = new Map(users.map(u => [u.id, { id: u.id, username: u.username, avatar: u.avatar ?? undefined }]));
// Map logs with user info
const logs = rawLogs.map(log => ({
id: log.id,
action: log.action,
category: log.category,
userId: log.userId ?? undefined,
user: log.userId ? userMap.get(log.userId) : undefined,
targetUserId: log.targetUserId ?? undefined,
targetUser: log.targetUserId ? userMap.get(log.targetUserId) : undefined,
resourceType: log.resourceType ?? undefined,
resourceId: log.resourceId ?? undefined,
details: log.details ?? undefined,
userAgent: log.userAgent ?? undefined,
success: log.success,
createdAt: log.createdAt,
}));
return {
logs,
total,