using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Dpz.Core.Public.ViewModel;
using Dpz.Core.Public.ViewModel.Response;
namespace Dpz.Core.Service.RepositoryService;
public interface ICodeFileSystemEntryService
{
/// <summary>
/// 根据路径分段查找文件系统实体
/// </summary>
/// <param name="pathSegments">路径分段列表(null 或空表示根目录)</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>匹配的响应模型,不存在则返回 null</returns>
Task<CodeFileSystemEntryResponse?> FindByPathAsync(
IReadOnlyCollection<string>? pathSegments,
CancellationToken cancellationToken = default
);
/// <summary>
/// 根据路径分段查找文件系统实体(绕过缓存,读取最新数据库状态)
/// </summary>
/// <param name="pathSegments">路径分段列表(null 或空表示根目录)</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>匹配的响应模型,不存在则返回 null</returns>
Task<CodeFileSystemEntryResponse?> FindByPathWithoutCacheAsync(
IReadOnlyCollection<string>? pathSegments,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取指定父路径下的所有子项
/// </summary>
/// <param name="parentPathSegments">父路径分段列表(null 或空表示根目录)</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>子项响应列表</returns>
Task<List<CodeFileSystemEntryResponse>> GetChildrenAsync(
IReadOnlyCollection<string>? parentPathSegments,
CancellationToken cancellationToken = default
);
/// <summary>
/// 根据关键字搜索文件/目录名称(忽略大小写)
/// </summary>
/// <param name="keyword">搜索关键字</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>匹配的响应列表</returns>
Task<List<CodeFileSystemEntryResponse>> SearchAsync(
string keyword,
CancellationToken cancellationToken = default
);
/// <summary>
/// 保存描述
/// </summary>
/// <param name="path">路径分段</param>
/// <param name="name">文件或目录名称</param>
/// <param name="description">描述</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>是否保存成功</returns>
Task<bool> SaveDescriptionAsync(
string[]? path,
string name,
string? description,
CancellationToken cancellationToken = default
);
/// <summary>
/// 保存AI分析结果
/// </summary>
/// <param name="path">路径分段</param>
/// <param name="name">文件名称</param>
/// <param name="analyzeResult">分析结果</param>
/// <param name="analyzedHash">源文件 hash</param>
/// <param name="cancellationToken">取消令牌</param>
Task SaveAiAnalyzeResultAsync(
string[]? path,
string name,
string analyzeResult,
string? analyzedHash = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// 判断是否需要触发AI分析
/// </summary>
/// <param name="path"></param>
/// <param name="name"></param>
/// <param name="codeContainer"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
Task<bool> ShouldAnalyzeAsync(
string[]? path,
string? name,
CodeContainer? codeContainer,
CancellationToken cancellationToken = default
);
/// <summary>
/// 全量同步文件系统到数据库:扫描本地文件与 DB 记录比对,执行增删改操作
/// </summary>
/// <param name="cancellationToken">取消令牌</param>
Task SyncAsync(CancellationToken cancellationToken = default);
}
评论加载中...