50 lines
1.7 KiB
JavaScript
50 lines
1.7 KiB
JavaScript
import { createAdminAuditLog, listAdminAuditLogs } from '../../repositories/admin-audit-log-repo.js'
|
|
import { nowIso } from '../../utils/time.js'
|
|
import { normalizeDateQuery, normalizePage, normalizePageSize, safeParseJson } from './admin-query-utils.js'
|
|
|
|
export async function writeAdminAuditLog(session, payload = {}) {
|
|
if (!session?.userId) {
|
|
return null
|
|
}
|
|
|
|
return createAdminAuditLog({
|
|
actorUserId: session.userId,
|
|
actorUsername: session.username,
|
|
actorRole: session.role,
|
|
action: String(payload.action || '').trim(),
|
|
targetType: String(payload.targetType || '').trim() || 'unknown',
|
|
targetId: String(payload.targetId || '').trim(),
|
|
payloadJson: JSON.stringify(payload.data || {}),
|
|
createdAt: nowIso(),
|
|
})
|
|
}
|
|
|
|
export async function getAdminAuditLogs(query = {}) {
|
|
const page = normalizePage(query.page)
|
|
const pageSize = normalizePageSize(query.pageSize)
|
|
const { items, total } = await listAdminAuditLogs({
|
|
page,
|
|
pageSize,
|
|
actorUsername: String(query.actorUsername || '').trim(),
|
|
action: String(query.action || '').trim(),
|
|
targetType: String(query.targetType || '').trim(),
|
|
dateFrom: normalizeDateQuery(query.dateFrom),
|
|
dateTo: normalizeDateQuery(query.dateTo, true),
|
|
})
|
|
|
|
return {
|
|
items: items.map((item) => ({
|
|
logId: Number(item.id),
|
|
actorUserId: Number(item.actor_user_id || 0),
|
|
actorUsername: item.actor_username,
|
|
actorRole: item.actor_role,
|
|
action: item.action,
|
|
targetType: item.target_type,
|
|
targetId: item.target_id,
|
|
payload: safeParseJson(item.payload_json),
|
|
createdAt: item.created_at,
|
|
})),
|
|
pagination: { page, pageSize, total },
|
|
}
|
|
}
|