namespace Dpz.Core.WebApi.Models;

/// <summary>
/// 评论查询参数
/// </summary>
public class CommentQueryDto : QueryDtoBase
{
    /// <summary>
    /// 关联节点
    /// </summary>
    public CommentNode? Node { get; set; }

    /// <summary>
    /// 关联ID
    /// </summary>
    public string? Relation { get; set; }
}

/// <summary>
/// 评论分页查询参数
/// </summary>
public class CommentPageQuery
{
    /// <summary>
    /// comment node
    /// </summary>
    [Required]
    public CommentNode Node { get; set; }

    /// <summary>
    /// comment relation
    /// </summary>
    [Required]
    public required string Relation { get; set; }

    private const int MaxPageSize = 50;
    private const int MinPageSize = 1;
    private const int MinPageIndex = 1;

    /// <summary>
    /// 页容量
    /// </summary>
    public int PageSize
    {
        get;
        set
        {
            field = value switch
            {
                > MaxPageSize => MaxPageSize,
                < MinPageSize => MinPageSize,
                _ => value,
            };
        }
    } = 10;

    /// <summary>
    /// 页码
    /// </summary>
    public int PageIndex
    {
        get;
        set => field = field < MinPageIndex ? MinPageSize : value;
    } = 1;
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这段代码定义了两个用于评论查询的数据传输对象(DTO),用于Web API中处理评论相关的查询请求。让我详细解释一下:

1. CommentQueryDto 类

public class CommentQueryDto : QueryDtoBase

这是一个评论查询参数类,继承自 QueryDtoBase

  • Node 属性CommentNode? 类型,表示评论关联的节点,可为空
  • Relation 属性string? 类型,表示关联ID,可为空

这个类主要用于一般的评论查询场景,参数都是可选的。

2. CommentPageQuery 类

public class CommentPageQuery

这是一个专门用于评论分页查询的参数类,具有以下特点:

必需属性

  • Node:使用 [Required] 特性标注,必须提供评论节点
  • Relation:使用 [Required]required 关键字双重约束,必须提供关联ID

分页控制常量

private const int MaxPageSize = 50;    // 最大页容量
private const int MinPageSize = 1;     // 最小页容量  
private const int MinPageIndex = 1;    // 最小页码

智能属性设计

PageSize 属性(页容量):

public int PageSize
{
    get;
    set
    {
        field = value switch
        {
            > MaxPageSize => MaxPageSize,    // 超过50则设为50
            < MinPageSize => MinPageSize,    // 小于1则设为1
            _ => value,                      // 其他情况保持原值
        };
    }
} = 10;  // 默认值为10

PageIndex 属性(页码):

public int PageIndex
{
    get;
    set => field = field < MinPageIndex ? MinPageSize : value;
} = 1;  // 默认值为1

设计特点

  1. 数据验证:通过属性设置器自动限制分页参数的合理范围
  2. 默认值:提供合理的默认分页参数(第1页,每页10条)
  3. 类型安全:使用强类型约束确保数据完整性
  4. 职责分离:两个类分别处理不同的查询场景

这种设计确保了API接口的健壮性,防止了无效的分页参数,同时提供了良好的开发体验。

评论加载中...