using DD.Persistence.Database.EntityAbstractions; using DD.Persistence.ModelsAbstractions; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace DD.Persistence.Database.Entity; /// /// Часть записи, описывающая изменение /// [Table("change_log")] public class ChangeLog : IDiscriminatorItem, IChangeLog { [Key, Comment("Ключ записи")] public Guid Id { get; set; } [Comment("Дискриминатор таблицы")] public Guid DiscriminatorId { get; set; } [Comment("Дата создания записи")] public DateTimeOffset Creation { get; set; } [Comment("Дата устаревания (например при удалении)")] public DateTimeOffset? Obsolete { get; set; } [Comment("Id заменяющей записи")] public Guid? IdNext { get; set; } [Column(TypeName = "jsonb"), Comment("Значение")] public required IDictionary Value { get; set; } [Required, Comment("Id коммита на создание записи")] public Guid IdCreatedCommit { get; set; } [Comment("Id коммита на устаревание записи")] public Guid? IdObsoletedCommit { get; set; } [Required, ForeignKey(nameof(IdCreatedCommit)), Comment("Коммит пользователя на создание записи")] public virtual ChangeLogCommit CreatedCommit { get; set; } = null!; [ForeignKey(nameof(IdObsoletedCommit)), Comment("Коммит пользователя на устаревание записи")] public virtual ChangeLogCommit? ObsoletedCommit { get; set; } }