using System.ComponentModel.DataAnnotations; using Jiaowu.Api.Domain.Common; namespace Jiaowu.Api.Domain.Academic; public interface IArchivable { bool IsArchived { get; set; } DateTime? ArchivedAt { get; set; } Guid? ArchivedByUserId { get; set; } string? ArchiveReason { get; set; } } // Append-only history; deliberately independent of entity deletion and login-account lifecycle. public sealed class ArchiveEvent : EntityBase { [MaxLength(20)] public required string Kind { get; set; } public Guid EntityId { get; set; } public bool IsArchived { get; set; } public Guid ActorUserId { get; set; } [MaxLength(256)] public string? ActorName { get; set; } [MaxLength(500)] public required string Reason { get; set; } }