UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

105 lines (104 loc) 3.45 kB
/** * GuardViolationRepository — Guard 违反记录的仓储实现 * * 从 ViolationsStore 提取的数据操作, * 使用 Drizzle 类型安全 API 操作 guard_violations 表。 */ import { guardViolations } from '../../infrastructure/database/drizzle/schema.js'; import { RepositoryBase } from '../base/RepositoryBase.js'; export interface ViolationRecord { ruleId?: string; severity?: string; message?: string; line?: number; [key: string]: unknown; } export interface GuardViolationEntity { id: string; filePath: string; triggeredAt: string; violationCount: number; summary: string; violations: ViolationRecord[]; createdAt: number; } export interface GuardViolationInsert { id: string; filePath: string; triggeredAt: string; violationCount: number; summary?: string; violations: ViolationRecord[]; createdAt: number; } export interface ViolationStats { totalRuns: number; totalViolations: number; averageViolationsPerRun: string | number; lastRunAt: string | null; } export interface ViolationStatByRule { ruleId: string | null; severity: string | null; count: number; } export interface PaginatedViolations { data: GuardViolationEntity[]; pagination: { page: number; limit: number; total: number; pages: number; }; } export declare class GuardViolationRepositoryImpl extends RepositoryBase<typeof guardViolations, GuardViolationEntity> { #private; /** 最大保留条数 */ static readonly MAX_RUNS = 200; constructor(drizzle: ConstructorParameters<typeof RepositoryBase<typeof guardViolations, GuardViolationEntity>>[0]); findById(id: string): Promise<GuardViolationEntity | null>; create(data: GuardViolationInsert): Promise<GuardViolationEntity>; delete(id: string): Promise<boolean>; /** 获取指定文件的最近一条记录 (用于去重比较) */ getLastByFile(filePath: string): Promise<{ id: string; violationsJson: string; } | null>; /** 刷新已有记录的时间戳 (去重命中时) */ refreshTimestamp(id: string): Promise<void>; /** 获取所有运行记录 (最旧在前) */ getRuns(): Promise<GuardViolationEntity[]>; /** 按文件路径查询 */ getRunsByFile(filePath: string): Promise<GuardViolationEntity[]>; /** 获取最近 N 条记录 */ getRecentRuns(n?: number): Promise<GuardViolationEntity[]>; /** 分页查询 */ list(filters?: { file?: string; }, options?: { page?: number; limit?: number; }): Promise<PaginatedViolations>; /** 获取统计汇总 */ getStats(): Promise<ViolationStats>; /** * 按规则 ID 聚合统计 * 利用 SQLite json_each 展开 violations_json 数组 * * json_each 是 SQLite 专有函数,Drizzle 无 typed API (ORM limitation) */ getStatsByRule(): Promise<ViolationStatByRule[]>; /** 截断超限记录,保留最新 maxRuns 条 */ enforceCapacity(maxRuns?: number): Promise<number>; /** 清空所有记录 */ clearAll(): Promise<void>; /** 清除指定文件的记录 */ clearByFile(filePath: string): Promise<number>; /** * 最近的 violation JSON 列表 (CoverageAnalyzer.#getRecentViolations) */ findRecentViolationsJson(limit: number): Array<{ filePath: string; violationsJson: string; }>; }