/** * 文件系统存储适配器实现 * 将数据存储在文件系统中的适配器,适用于轻量级应用和简单场景 */ import { StorageAdapter, StorageConfig, QueryCondition, SortOption } from '../../interfaces/StorageAdapter'; /** * 文件系统存储适配器配置接口 */ export interface FileSystemStorageConfig extends StorageConfig { /** * 存储根目录路径 */ rootDir: string; /** * 文件扩展名 */ fileExtension?: string; /** * 是否启用事务性操作 */ enableTransactions?: boolean; /** * 是否在保存前格式化JSON */ prettyPrint?: boolean; /** * 最大并发读写文件数量 */ maxConcurrentOps?: number; } /** * 文件系统存储适配器类 */ export declare class FileSystemStorageAdapter implements StorageAdapter { /** * 配置项 */ private config; /** * 是否已初始化 */ private initialized; /** * 并发操作控制计数器 */ private concurrentOps; /** * 构造函数 */ constructor(); /** * 初始化适配器 * @param config 适配器配置 */ initialize(config: FileSystemStorageConfig): Promise; /** * 关闭适配器 */ close(): Promise; /** * 创建新数据项 * @param namespace 命名空间 * @param data 数据对象 * @returns 创建的数据对象,包含ID */ create(namespace: string, data: Partial): Promise; /** * 根据ID获取数据项 * @param namespace 命名空间 * @param id 数据项ID * @returns 数据项,如果不存在则返回null */ getById(namespace: string, id: string): Promise; /** * 查找符合条件的数据项 * @param namespace 命名空间 * @param query 查询条件 * @param skip 跳过的记录数 * @param limit 返回的最大记录数 * @param sort 排序条件 * @returns 查询结果数组和总数 */ find(namespace: string, query?: QueryCondition, skip?: number, limit?: number, sort?: SortOption): Promise<{ data: T[]; total: number; }>; /** * 更新数据项 * @param namespace 命名空间 * @param id 数据项ID * @param data 更新的数据 * @returns 更新后的数据项,如果不存在则返回null */ update(namespace: string, id: string, data: Partial): Promise; /** * 删除数据项 * @param namespace 命名空间 * @param id 数据项ID * @returns 是否成功删除 */ delete(namespace: string, id: string): Promise; /** * 批量创建数据项 * @param namespace 命名空间 * @param dataList 数据对象数组 * @returns 创建的数据对象数组,包含ID */ bulkCreate(namespace: string, dataList: Partial[]): Promise; /** * 检查适配器是否可用 * @returns 是否可用 */ isAvailable(): Promise; /** * 确保适配器已初始化 */ private ensureInitialized; /** * 确保命名空间目录存在 * @param namespace 命名空间 */ private ensureNamespaceExists; /** * 获取命名空间目录路径 * @param namespace 命名空间 * @returns 目录路径 */ private getNamespacePath; /** * 获取数据项文件路径 * @param namespace 命名空间 * @param id 数据项ID * @returns 文件路径 */ private getItemFilePath; /** * 控制并发并写入文件 * @param filePath 文件路径 * @param data 要写入的数据 */ private writeWithConcurrencyControl; /** * 应用查询条件过滤数据 * @param items 数据项数组 * @param query 查询条件 * @returns 过滤后的数据项数组 */ private applyQuery; /** * 应用排序条件 * @param items 数据项数组 * @param sort 排序条件 * @returns 排序后的数据项数组 */ private applySort; }