using OrpaonVision.Core.Results;
using OrpaonVision.Model.Production;
namespace OrpaonVision.Core.Production;
///
/// 运行状态转换日志仓储接口。
///
public interface IRunStateTransitionLogRepository
{
///
/// 创建状态转换日志。
///
/// 状态转换日志模型。
/// 取消令牌。
/// 创建结果。
Task> CreateAsync(RunStateTransitionLogModel log, CancellationToken cancellationToken = default);
///
/// 根据ID获取状态转换日志。
///
/// 日志ID。
/// 取消令牌。
/// 状态转换日志模型。
Task> GetByIdAsync(Guid logId, CancellationToken cancellationToken = default);
///
/// 根据产品会话ID获取状态转换日志列表。
///
/// 产品会话ID。
/// 取消令牌。
/// 状态转换日志列表。
Task>> GetBySessionIdAsync(Guid sessionId, CancellationToken cancellationToken = default);
///
/// 根据层级会话ID获取状态转换日志列表。
///
/// 层级会话ID。
/// 取消令牌。
/// 状态转换日志列表。
Task>> GetByLayerSessionIdAsync(Guid layerSessionId, CancellationToken cancellationToken = default);
///
/// 根据转换类型获取状态转换日志列表。
///
/// 转换类型。
/// 取消令牌。
/// 状态转换日志列表。
Task>> GetByTransitionTypeAsync(RunStateTransitionType transitionType, CancellationToken cancellationToken = default);
///
/// 根据人工干预标志获取状态转换日志列表。
///
/// 是否人工干预。
/// 取消令牌。
/// 状态转换日志列表。
Task>> GetByManualInterventionAsync(bool isManualIntervention, CancellationToken cancellationToken = default);
///
/// 分页查询状态转换日志。
///
/// 页索引。
/// 页大小。
/// 产品类型编码(可选)。
/// 转换类型(可选)。
/// 是否人工干预(可选)。
/// 开始时间(可选)。
/// 结束时间(可选)。
/// 取消令牌。
/// 分页结果。
Task>> GetPagedAsync(
int pageIndex,
int pageSize,
string? productTypeCode = null,
RunStateTransitionType? transitionType = null,
bool? isManualIntervention = null,
DateTime? startTime = null,
DateTime? endTime = null,
CancellationToken cancellationToken = default);
///
/// 删除状态转换日志。
///
/// 日志ID。
/// 取消令牌。
/// 删除结果。
Task> DeleteAsync(Guid logId, CancellationToken cancellationToken = default);
///
/// 批量删除状态转换日志。
///
/// 产品会话ID列表。
/// 取消令牌。
/// 删除结果。
Task> DeleteBySessionIdsAsync(List sessionIds, CancellationToken cancellationToken = default);
///
/// 清理指定日期之前的日志。
///
/// 指定日期。
/// 取消令牌。
/// 删除的记录数。
Task> CleanupLogsBeforeAsync(DateTime beforeDate, CancellationToken cancellationToken = default);
}