Files
OrpaonVision/OrpaonVision.Core/Domain/VersionedEntityBase.cs
2026-04-06 22:04:05 +08:00

107 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
}
}
}