namespace OrpaonVision.Core.Domain;
///
/// 支持软删除的实体基类。
///
public abstract class SoftDeleteEntityBase : AuditableEntityBase
{
private bool _isDeleted;
///
/// 是否已删除。
///
public bool IsDeleted
{
get => _isDeleted;
set
{
if (_isDeleted != value)
{
_isDeleted = value;
if (value)
{
MarkAsUpdated("System-SoftDelete");
}
}
}
}
///
/// 删除时间(UTC)。
///
public DateTime? DeletedAt { get; private set; }
///
/// 删除者。
///
public string? DeletedBy { get; private set; }
///
/// 删除原因。
///
public string? DeleteReason { get; private set; }
///
/// 标记为已删除。
///
/// 删除者。
/// 删除原因。
public virtual void MarkAsDeleted(string? deletedBy = null, string? deleteReason = null)
{
if (!IsDeleted)
{
IsDeleted = true;
DeletedAt = DateTime.UtcNow;
DeletedBy = deletedBy;
DeleteReason = deleteReason;
MarkAsUpdated(deletedBy);
}
}
///
/// 恢复删除状态。
///
/// 恢复者。
public virtual void Restore(string? restoredBy = null)
{
if (IsDeleted)
{
IsDeleted = false;
DeletedAt = null;
DeletedBy = null;
DeleteReason = null;
MarkAsUpdated(restoredBy);
}
}
}