using Dpz.Core.Entity.Base.ExpressTreeQuery;
using Dpz.Core.Public.Entity;

namespace Dpz.Core.Public.ViewModel.Request;

/// <summary>
/// Represents the CodeFlatRequest type.
/// </summary>
public class CodeFlatRequest : PaginationBase
{
    /// <summary>
    /// 路径查询(精确匹配,多级路径)
    /// 支持匹配完整路径或父级路径
    /// </summary>
    [QueryFilter(
        FilterCondition.NotNull,
        Comparison = Comparison.Equal,
        PropertiesNames = [
            nameof(CodeFileSystemEntry.ParentPathSegments),
            nameof(CodeFileSystemEntry.PathSegments),
        ],
        EntityType = typeof(CodeFileSystemEntry)
    )]
    public List<string>? PathSegments { get; set; }

    /// <summary>
    /// 名称查询(模糊匹配)
    /// </summary>
    [QueryFilter(
        FilterCondition.NotNullOrWhiteSpace,
        Comparison = Comparison.Contains,
        PropertyName = nameof(CodeFileSystemEntry.Name),
        EntityType = typeof(CodeFileSystemEntry)
    )]
    public string? Name { get; set; }

    /// <summary>
    /// 扩展名查询(精确匹配)
    /// </summary>
    [QueryFilter(
        FilterCondition.NotNullOrWhiteSpace,
        Comparison = Comparison.Equal,
        PropertyName = nameof(CodeFileSystemEntry.Extension),
        EntityType = typeof(CodeFileSystemEntry)
    )]
    public string? Extension { get; set; }

    /// <summary>
    /// 排序字段
    /// </summary>
    public CodeFileSortField? SortField { get; set; }

    /// <summary>
    /// 是否降序排序
    /// </summary>
    public bool IsDescending { get; set; } = true;
}

/// <summary>
/// 源码文件排序字段
/// </summary>
public enum CodeFileSortField
{
    /// <summary>
    /// 按大小排序
    /// </summary>
    Size = 1,

    /// <summary>
    /// 按创建时间排序
    /// </summary>
    CreatedTime = 2,

    /// <summary>
    /// 按最后修改时间排序
    /// </summary>
    LastWriteTime = 3,

    /// <summary>
    /// 按最后更新时间排序
    /// </summary>
    LastUpdateTime = 4,

    /// <summary>
    /// 按AI分析时间排序
    /// </summary>
    AiAnalyzeTime = 5,
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这个代码文件定义了一个用于源码文件查询的请求模型和相关的枚举类型。让我逐一解释:

主要组件

1. CodeFlatRequest

这是一个继承自 PaginationBase 的查询请求类,用于实现源码文件系统的扁平化查询功能。

关键特性:

  • 分页支持:继承自 PaginationBase,支持分页查询
  • 查询过滤器:使用 [QueryFilter] 特性来定义查询条件

查询字段:

  1. PathSegments (路径查询)

    [QueryFilter(
        FilterCondition.NotNull,
        Comparison = Comparison.Equal,
        PropertiesNames = [
            nameof(CodeFileSystemEntry.ParentPathSegments),
            nameof(CodeFileSystemEntry.PathSegments),
        ],
        EntityType = typeof(CodeFileSystemEntry)
    )]
    
    • 用于精确匹配多级路径
    • 支持匹配完整路径或父级路径
    • 只有在值不为 null 时才会应用过滤条件
  2. Name (文件名查询)

    [QueryFilter(
        FilterCondition.NotNullOrWhiteSpace,
        Comparison = Comparison.Contains,
        PropertyName = nameof(CodeFileSystemEntry.Name),
        EntityType = typeof(CodeFileSystemEntry)
    )]
    
    • 支持模糊匹配文件名
    • 使用 Contains 比较方式,实现部分匹配
  3. Extension (扩展名查询)

    [QueryFilter(
        FilterCondition.NotNullOrWhiteSpace,
        Comparison = Comparison.Equal,
        PropertyName = nameof(CodeFileSystemEntry.Extension),
        EntityType = typeof(CodeFileSystemEntry)
    )]
    
    • 精确匹配文件扩展名
    • 用于筛选特定类型的文件
  4. 排序相关字段

    • SortField:指定排序字段(可选)
    • IsDescending:是否降序排序(默认为 true)

2. CodeFileSortField 枚举

定义了源码文件可用的排序字段:

  • Size (1):按文件大小排序
  • CreatedTime (2):按创建时间排序
  • LastWriteTime (3):按最后修改时间排序
  • LastUpdateTime (4):按最后更新时间排序
  • AiAnalyzeTime (5):按AI分析时间排序

设计特点

  1. 声明式查询:通过 QueryFilter 特性声明式地定义查询条件,减少了手写查询逻辑
  2. 类型安全:使用 nameof 操作符确保属性名的类型安全
  3. 灵活性:支持多种查询条件和排序方式
  4. 可扩展性:易于添加新的查询字段和排序选项

这个设计模式常用于构建灵活的查询API,特别适合文件管理系统或代码分析工具中的文件搜索功能。

评论加载中...