using Dpz.Core.Entity.Base;
using Dpz.Core.Entity.Base.Indexes;
namespace Dpz.Core.Public.Entity;
/// <summary>
/// 代码文件系统实体
/// </summary>
public class CodeFileSystemEntry : BaseEntity, IIndexedEntity<CodeFileSystemEntry>
{
/// <summary>
/// 完整路径分段
/// </summary>
public required List<string> PathSegments { get; set; } = [];
/// <summary>
/// 名称
/// </summary>
public required string Name { get; set; }
/// <summary>
/// 父级路径分段(根目录为空集合)
/// </summary>
public List<string> ParentPathSegments { get; set; } = [];
/// <summary>
/// 是否为目录
/// </summary>
public bool IsDirectory { get; set; }
/// <summary>
/// 扩展名(目录为空)
/// </summary>
public string? Extension { get; set; }
/// <summary>
/// 大小(目录为空)
/// </summary>
public long? Size { get; set; }
/// <summary>
/// 文件哈希(目录为空)
/// </summary>
public string? Hash { get; set; }
/// <summary>
/// 文件内容类型(目录为 Unknown)
/// </summary>
public CodeFileContentType CodeFileContentType { get; set; }
/// <summary>
/// 文件内容(目录为空)
/// </summary>
public string? FileContent { get; set; }
/// <summary>
/// 代码语言
/// </summary>
public string? CodeLanguage { get; set; }
/// <summary>
/// 标签
/// </summary>
public List<string> Tags { get; set; } = [];
/// <summary>
/// 创建时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime CreatedTime { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime LastWriteTime { get; set; }
/// <summary>
/// 最后更新时间(数据更新时间)
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime LastUpdateTime { get; set; }
/// <summary>
/// 描述
/// </summary>
public string? Description { get; set; }
/// <summary>
/// AI分析结果
/// </summary>
public string? AiAnalyzeResult { get; set; }
/// <summary>
/// AI分析时间
/// </summary>
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime? AiAnalyzeTime { get; set; }
/// <summary>
/// AI分析对应的文件哈希
/// </summary>
public string? AiAnalyzeHash { get; set; }
/// <inheritdoc />
public static IReadOnlyList<EntityIndexDefinition> GetIndexDefinitions() =>
[
// PathSegments 索引(路径查询)
new()
{
Name = "idx_path_segments",
Fields = [EntityIndexField.Ascending<CodeFileSystemEntry>(x => x.PathSegments)],
},
// ParentPathSegments 索引(查询子项)
new()
{
Name = "idx_parent_path_segments",
Fields =
[
EntityIndexField.Ascending<CodeFileSystemEntry>(x => x.ParentPathSegments),
],
},
// Name 索引(名称搜索)
new()
{
Name = "idx_name",
Fields = [EntityIndexField.Ascending<CodeFileSystemEntry>(x => x.Name)],
},
// IsDirectory + ParentPathSegments 复合索引(查询目录下的文件)
new()
{
Name = "idx_is_directory_parent_path",
Fields =
[
EntityIndexField.Ascending<CodeFileSystemEntry>(x => x.IsDirectory),
EntityIndexField.Ascending<CodeFileSystemEntry>(x => x.ParentPathSegments),
],
},
];
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个名为 CodeFileSystemEntry 的实体类,用于表示代码文件系统中的条目(文件或目录)。让我详细解释一下:
类的基本结构
public class CodeFileSystemEntry : BaseEntity, IIndexedEntity<CodeFileSystemEntry>
- 继承自
BaseEntity:提供基础实体功能 - 实现
IIndexedEntity<CodeFileSystemEntry>:支持数据库索引定义
主要属性
路径相关
- PathSegments:完整路径的分段列表(如
/src/controllers/UserController.cs分为["src", "controllers", "UserController.cs"]) - Name:文件或目录名称
- ParentPathSegments:父级路径分段(用于快速查找子项)
文件属性
- IsDirectory:标识是文件还是目录
- Extension:文件扩展名(目录为空)
- Size:文件大小(目录为空)
- Hash:文件内容哈希值(用于检测文件变更)
内容相关
- CodeFileContentType:文件内容类型枚举
- FileContent:文件的文本内容
- CodeLanguage:代码语言类型
- Tags:标签列表,便于分类管理
时间戳
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
使用本地时间存储:
- CreatedTime:创建时间
- LastWriteTime:最后修改时间
- LastUpdateTime:数据更新时间
AI 分析功能
- Description:描述信息
- AiAnalyzeResult:AI 分析结果
- AiAnalyzeTime:AI 分析时间
- AiAnalyzeHash:分析时对应的文件哈希(用于判断文件是否已变更)
数据库索引定义
GetIndexDefinitions() 方法定义了4个索引来优化查询性能:
- 路径索引:基于
PathSegments的升序索引,用于路径查询 - 父路径索引:基于
ParentPathSegments的升序索引,用于查找子项 - 名称索引:基于
Name的升序索引,用于名称搜索 - 复合索引:结合
IsDirectory和ParentPathSegments,用于高效查询指定目录下的文件
设计特点
- 层次化存储:通过路径分段支持文件系统的层次结构
- 版本控制友好:通过哈希值检测文件变更
- AI 集成:内置 AI 分析功能,支持代码智能分析
- 性能优化:预定义索引确保查询效率
- 灵活标签:支持自定义标签系统
这个实体类适用于构建代码管理系统、文档系统或任何需要管理文件系统结构的应用程序。
AI 正在分析代码…
评论加载中...