using Dpz.Core.Entity.Base.ExpressTreeQuery;
using Dpz.Core.EnumLibrary.Pipeline;
using Dpz.Core.Public.Entity.Pipeline;
using Dpz.Core.Service.Mediator.Features.Pipeline.Contracts;
namespace Dpz.Core.Service.Mediator.Features.Pipeline.Queries;
/// <summary>
/// 获取最新的 CI/CD 历史记录 入参
/// </summary>
public class GetPipelineHistoryLatestRequest : IRequest<List<PipelineHistoryLatestResponse>>
{
/// <summary>
/// 最新数量
/// </summary>
public int LatestCount { get; set; } = 10;
/// <summary>
/// CI/CD 开始时间查询范围起始
/// </summary>
[QueryFilter(
FilterCondition.NotNull,
Comparison = Comparison.GtOrEqual,
PropertyName = nameof(PipelineHistory.StartTime)
)]
public DateTime? StartTimeRangeBegin { get; set; }
/// <summary>
/// CI/CD 开始时间查询范围结束
/// </summary>
[QueryFilter(
FilterCondition.NotNull,
Comparison = Comparison.LtOrEqual,
PropertyName = nameof(PipelineHistory.StartTime)
)]
public DateTime? StartTimeRangeEnd { get; set; }
/// <summary>
/// CI/CD 结束时间查询范围起始
/// </summary>
[QueryFilter(
FilterCondition.NotNull,
Comparison = Comparison.GtOrEqual,
PropertyName = nameof(PipelineHistory.EndTime)
)]
public DateTime? EndTimeRangeBegin { get; set; }
/// <summary>
/// CI/CD 结束时间查询范围结束
/// </summary>
[QueryFilter(
FilterCondition.NotNull,
Comparison = Comparison.LtOrEqual,
PropertyName = nameof(PipelineHistory.EndTime)
)]
public DateTime? EndTimeRangeEnd { get; set; }
/// <summary>
/// CI/CD 状态
/// </summary>
[QueryFilter(FilterCondition.NotNull)]
public PipelineStatus? Status { get; set; }
/// <summary>
/// 构建、发布的项目
/// </summary>
[QueryFilter(FilterCondition.NotNull)]
public BuildProject? Project { get; set; }
/// <summary>
/// 发布的版本号
/// </summary>
public string? Version { get; set; }
}
⚠⚠ 以下内容为AI分析的结果,请根据实际情况进行判断。
这段代码定义了一个C# 的请求类,用于获取最新的 CI/CD 历史记录。它属于Mediator模式中的一个查询请求,最终会被相应的Handler处理并返回PipelineHistoryLatestResponse列表。
下面逐步解释代码内容:
1. 命名空间和引用
using Dpz.Core.Entity.Base.ExpressTreeQuery;:引入基础表达式树查询相关类型(如QueryFilter特性、FilterCondition、Comparison枚举)。using Dpz.Core.EnumLibrary.Pipeline;:引入管线相关的状态枚举(如PipelineStatus)。using Dpz.Core.Public.Entity.Pipeline;:引入管线实体(如PipelineHistory、BuildProject)。using Dpz.Core.Service.Mediator.Features.Pipeline.Contracts;:引入该功能模块的契约/响应类型(如PipelineHistoryLatestResponse)。
2. 请求类定义
public class GetPipelineHistoryLatestRequest : IRequest<List<PipelineHistoryLatestResponse>>
- 它继承了
IRequest<TResult>接口(来自MediatR库),表示这是一个请求,并且期望返回List<PipelineHistoryLatestResponse>。
3. 属性详解
每个属性用于筛选查询历史记录,其中部分属性通过[QueryFilter]特性标记,说明它们会根据条件自动生成查询表达式。
LatestCount(最新数量)
public int LatestCount { get; set; } = 10;
- 表示要获取的记录条数,默认值为10。
- 没有使用
[QueryFilter],因为它是用于控制返回数量的,不是筛选条件。
StartTimeRangeBegin / StartTimeRangeEnd(开始时间范围)
[QueryFilter(FilterCondition.NotNull, Comparison = Comparison.GtOrEqual, PropertyName = nameof(PipelineHistory.StartTime))]
public DateTime? StartTimeRangeBegin { get; set; }
StartTimeRangeBegin:查询开始时间的下界(start >= 该时间)。- 特性含义:
FilterCondition.NotNull:如果该属性有值(非null),则应用这个筛选条件。Comparison = Comparison.GtOrEqual:比较方式为“大于或等于”。PropertyName:指定要比较的实体属性(这里为PipelineHistory.StartTime)。
对应的StartTimeRangeEnd则使用Comparison.LtOrEqual(小于等于),表示开始时间小于等于该值。
EndTimeRangeBegin / EndTimeRangeEnd(结束时间范围)
类似开始时间的筛选条件,只不过它们针对的是PipelineHistory.EndTime:
[QueryFilter(FilterCondition.NotNull, Comparison = Comparison.GtOrEqual, PropertyName = nameof(PipelineHistory.EndTime))]
public DateTime? EndTimeRangeBegin { get; set; }
- 用于过滤历史记录中的结束时间。
Status(状态)
[QueryFilter(FilterCondition.NotNull)]
public PipelineStatus? Status { get; set; }
- 可空枚举,表示只查询指定状态的记录。
[QueryFilter(FilterCondition.NotNull)]:如果该属性非null,则筛选字段名默认为属性名Status(因为没有指定PropertyName),即等于该状态。
Project(项目)
[QueryFilter(FilterCondition.NotNull)]
public BuildProject? Project { get; set; }
- 可空枚举,表示构建/发布的具体项目类型,只查询该项目的历史。
Version(版本号)
public string? Version { get; set; }
- 没有
[QueryFilter]标记,说明该字段可能在后续Handler里被单独处理(或模糊查询),而不是通过通用特性自动过滤。
4. 整体用途
这个请求通常用于支持一个API接口:例如请求“获取符合条件的最新的10条CI/CD历史记录”,可以根据:
- 数量的控制 (LatestCount)
- 开始时间范围
- 结束时间范围
- 状态
- 项目类型
- 版本号
来筛选数据库中的PipelineHistory记录,结果按开始时间降序等规则返回前N条记录。
[QueryFilter]特性是为了配合表达式树查询构建器,自动将请求对象的字段转换为LINQ的Where表达式,从而减少手动编写查询逻辑,提高代码复用性和可维护性。
总结
这是一个MediatR请求对象,封装了获取最新CI/CD历史记录的过滤条件和数量限制,特性标记使其能够自动映射到数据库查询中,最终返回DTO列表。
AI 正在分析代码…
评论加载中...