版本260406
This commit is contained in:
106
OrpaonVision.Core/Domain/VersionedEntityBase.cs
Normal file
106
OrpaonVision.Core/Domain/VersionedEntityBase.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user