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