Files
order_site/apps/backend/src/services/admin/admin-audit-service.js
T
2026-04-09 12:24:14 +08:00

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 },
}
}