Files
order_site/apps/backend/src/services/admin/admin-audit-service.ts
T
yml2213 8bcd9bbd81 收紧后端 TypeScript:统一 Json 类型与 TaskContext 契约
关闭 allowJs;集中 JsonObject 定义并替换分散 any 别名;parseTaskContext 返回 TaskContext;任务详情 API 标注 AdminTaskDetailView;测试减少 as any。
2026-07-10 15:52:05 +08:00

51 lines
1.8 KiB
TypeScript

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'
import type { JsonObject } from '../../types/json.js'
export async function writeAdminAuditLog(session: JsonObject | null | undefined, payload: JsonObject = {}) {
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: JsonObject = {}) {
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 },
}
}