autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
108 lines (107 loc) • 3.27 kB
TypeScript
/**
* AuditRepository — 审计日志的仓储实现
*
* 从 AuditStore 提取的数据操作,
* 使用 Drizzle 类型安全 API 操作 audit_logs 表。
*/
import { auditLogs } from '../../infrastructure/database/drizzle/schema.js';
import { RepositoryBase } from '../base/RepositoryBase.js';
export interface AuditLogEntity {
id: string;
timestamp: number;
actor: string;
actorContext: Record<string, unknown>;
action: string;
resource: string | null;
operationData: Record<string, unknown>;
result: string;
errorMessage: string | null;
duration: number | null;
}
export interface AuditLogInsert {
id: string;
timestamp: number;
actor: string;
actorContext?: string;
action: string;
resource?: string;
operationData?: string;
result: string;
errorMessage?: string | null;
duration?: number | null;
}
export interface AuditQueryFilters {
actor?: string;
action?: string;
result?: string;
startDate?: number;
endDate?: number;
limit?: number;
}
export interface AuditStats {
timeRange: string;
total: number;
success: number;
failure: number;
successRate: string;
avgDuration: string;
byActor: Array<{
actor: string;
count: number;
}>;
byAction: Array<{
action: string;
count: number;
}>;
}
export declare class AuditRepositoryImpl extends RepositoryBase<typeof auditLogs, AuditLogEntity> {
#private;
constructor(drizzle: ConstructorParameters<typeof RepositoryBase<typeof auditLogs, AuditLogEntity>>[0]);
findById(id: string): Promise<AuditLogEntity | null>;
create(data: AuditLogInsert): Promise<AuditLogEntity>;
delete(id: string): Promise<boolean>;
/** 动态多条件查询 */
query(filters?: AuditQueryFilters): Promise<AuditLogEntity[]>;
/** 根据请求 ID 查询 */
findByRequestId(requestId: string): Promise<AuditLogEntity | null>;
/** 根据角色查询 */
findByActor(actor: string, limit?: number): Promise<AuditLogEntity[]>;
/** 根据操作查询 */
findByAction(action: string, limit?: number): Promise<AuditLogEntity[]>;
/** 根据结果查询 */
findByResult(result: string, limit?: number): Promise<AuditLogEntity[]>;
/** 获取统计数据 */
getStats(timeRange?: string): Promise<AuditStats>;
/**
* 清理过期审计日志
* @param maxAgeDays 保留天数
*/
cleanup(maxAgeDays?: number): Promise<{
deleted: number;
}>;
/**
* Guard 违规规则名 TOP-N (SkillAdvisor.#getGuardPatterns)
*/
findTopGuardViolationRules(minCount: number, limit: number): Promise<Array<{
ruleName: string;
cnt: number;
}>>;
/**
* Guard 违规信号 (SignalCollector.#collectGuardSignals)
*/
findGuardViolationSignals(limit: number): Promise<Array<{
ruleName: string;
cnt: number;
lastAt: number;
}>>;
/**
* 最近动作日志 (SignalCollector.#collectActionSignals)
*/
findRecentActions(sinceTs: number, limit: number): Promise<Array<{
actor: string;
action: string;
resource: string | null;
result: string;
timestamp: number;
}>>;
}