Initial LisgloSIPS V2 implementation

This commit is contained in:
hectorzhao
2026-06-22 10:56:38 +08:00
commit 5fa1bd35e9
303 changed files with 35644 additions and 0 deletions
@@ -0,0 +1,32 @@
import { Inject, Injectable } from '@nestjs/common';
import type { FastifyRequest } from 'fastify';
import { AUDIT_REPOSITORY, type AuditEntryInput, type AuditRepository } from './audit.repository.js';
import { redactSensitive } from './redact.js';
import type { AuthenticatedRequest } from '../security/security.metadata.js';
@Injectable()
export class AuditService {
constructor(@Inject(AUDIT_REPOSITORY) private readonly repository: AuditRepository) {}
async write(input: AuditEntryInput): Promise<void> {
await this.repository.write({
...input,
beforeSummary: redactSensitive(input.beforeSummary),
afterSummary: redactSensitive(input.afterSummary)
});
}
baseFromRequest(request: FastifyRequest): Pick<AuditEntryInput, 'requestId' | 'userId' | 'username' | 'roleNames' | 'ip' | 'userAgent'> {
const authRequest = request as AuthenticatedRequest;
const requestIdHeader = request.headers['x-request-id'];
return {
requestId: requestIdHeader?.toString() ?? request.id,
userId: authRequest.currentUser?.id,
username: authRequest.currentUser?.username,
roleNames: authRequest.currentUser?.roles.join(','),
ip: request.ip,
userAgent: request.headers['user-agent']
};
}
}