autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
67 lines (66 loc) • 2.69 kB
TypeScript
/**
* RecipeSourceRefRepository — recipe_source_refs 表 CRUD (Drizzle ORM)
*
* Recipe 来源引用桥接表:建立 Recipe ↔ 源码文件的映射关系。
* 表使用复合主键 (recipe_id, source_path),没有独立 id 列。
*
* 主要消费者:SourceRefReconciler
*/
import type { DrizzleDB } from '../../infrastructure/database/drizzle/index.js';
export interface RecipeSourceRefEntity {
recipeId: string;
sourcePath: string;
status: string;
newPath: string | null;
verifiedAt: number;
}
export interface RecipeSourceRefInsert {
recipeId: string;
sourcePath: string;
status?: string;
newPath?: string | null;
verifiedAt: number;
}
export declare class RecipeSourceRefRepositoryImpl {
#private;
constructor(drizzle: DrizzleDB);
/** 按 Recipe ID 查询所有关联的源引用 */
findByRecipeId(recipeId: string): RecipeSourceRefEntity[];
/** 按源文件路径查询所有关联的引用 */
findBySourcePath(sourcePath: string): RecipeSourceRefEntity[];
/** 按状态查询 */
findByStatus(status: string): RecipeSourceRefEntity[];
/** 查找指定复合键 */
findOne(recipeId: string, sourcePath: string): RecipeSourceRefEntity | null;
/** 查询所有 stale 引用 */
findStale(): RecipeSourceRefEntity[];
/** 统计条数 */
count(): number;
/** UPSERT — 插入或更新(按复合主键) */
upsert(data: RecipeSourceRefInsert): void;
/** 更新状态 */
updateStatus(recipeId: string, sourcePath: string, status: string, newPath?: string): boolean;
/** 按 Recipe ID 删除所有关联引用 */
deleteByRecipeId(recipeId: string): number;
/** 删除指定复合键 */
deleteOne(recipeId: string, sourcePath: string): boolean;
/** 检查表是否可访问(SourceRefReconciler 使用) */
isAccessible(): boolean;
/** Stale counts grouped by recipe (for SourceRefReconciler signal emission) */
getStaleCountsByRecipe(): Array<{
recipeId: string;
staleCount: number;
totalCount: number;
}>;
/** Find all entries with status='renamed' and non-null new_path */
findRenamed(): RecipeSourceRefEntity[];
/** Replace source path (updates composite key column) — used by SourceRefReconciler.applyRepairs */
replaceSourcePath(recipeId: string, oldSourcePath: string, newSourcePath: string, verifiedAt: number): void;
/** 查询多个 Recipe 的非 stale 来源引用(SearchEngine _supplementDetails 用) */
findActiveByRecipeIds(ids: string[]): {
recipeId: string;
sourcePath: string;
status: string;
newPath: string | null;
}[];
}