namespace OrpaonVision.Core.Domain;
///
/// 版本化实体基类。
///
public abstract class VersionedEntityBase : AuditableEntityBase
{
///
/// 版本号。
///
public string VersionNo { get; set; } = string.Empty;
///
/// 状态。
///
public int Status { get; set; }
///
/// 发布时间(UTC)。
///
public DateTime? PublishedAt { get; private set; }
///
/// 发布者。
///
public string? PublishedBy { get; private set; }
///
/// 是否为当前版本。
///
public bool IsCurrent { get; private set; }
///
/// 是否已发布。
///
public bool IsPublished => PublishedAt.HasValue;
///
/// 标记为已发布。
///
/// 发布者。
public virtual void MarkAsPublished(string? publishedBy = null)
{
if (!IsPublished)
{
PublishedAt = DateTime.UtcNow;
PublishedBy = publishedBy;
Status = 1; // 已发布状态
MarkAsUpdated(publishedBy);
}
}
///
/// 标记为当前版本。
///
/// 更新者。
public virtual void MarkAsCurrent(string? updatedBy = null)
{
if (!IsCurrent)
{
IsCurrent = true;
MarkAsUpdated(updatedBy);
}
}
///
/// 取消当前版本状态。
///
/// 更新者。
public virtual void UnmarkCurrent(string? updatedBy = null)
{
if (IsCurrent)
{
IsCurrent = false;
MarkAsUpdated(updatedBy);
}
}
///
/// 设置版本号。
///
/// 版本号。
/// 更新者。
public virtual void SetVersionNo(string versionNo, string? updatedBy = null)
{
if (VersionNo != versionNo)
{
VersionNo = versionNo;
MarkAsUpdated(updatedBy);
}
}
///
/// 设置状态。
///
/// 状态。
/// 更新者。
public virtual void SetStatus(int status, string? updatedBy = null)
{
if (Status != status)
{
Status = status;
MarkAsUpdated(updatedBy);
}
}
}