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个索引来优化查询性能:

  1. 路径索引:基于 PathSegments 的升序索引,用于路径查询
  2. 父路径索引:基于 ParentPathSegments 的升序索引,用于查找子项
  3. 名称索引:基于 Name 的升序索引,用于名称搜索
  4. 复合索引:结合 IsDirectory 和 ParentPathSegments,用于高效查询指定目录下的文件

设计特点

  1. 层次化存储:通过路径分段支持文件系统的层次结构
  2. 版本控制友好:通过哈希值检测文件变更
  3. AI 集成:内置 AI 分析功能,支持代码智能分析
  4. 性能优化:预定义索引确保查询效率
  5. 灵活标签:支持自定义标签系统

这个实体类适用于构建代码管理系统、文档系统或任何需要管理文件系统结构的应用程序。

评论加载中...