using DigitalData.Core.Abstractions; using DigitalData.UserManager.Domain.Entities; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using static EnvelopeGenerator.Common.Constants; namespace EnvelopeGenerator.Domain.Entities { [Table("TBSIG_ENVELOPE_HISTORY", Schema = "dbo")] public class EnvelopeHistory : IUnique { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Column("GUID")] public long Id { get; set; } [Required] [Column("ENVELOPE_ID")] public int EnvelopeId { get; set; } [Required] [Column("USER_REFERENCE", TypeName = "nvarchar(128)")] public required string UserReference { get; init; } [Required] [Column("STATUS")] public int Status { get; set; } [Required] [Column("ADDED_WHEN", TypeName = "datetime")] [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public DateTime AddedWhen { get; set; } [Column("ACTION_DATE", TypeName = "datetime")] public DateTime? ActionDate { get; set; } [Column("COMMENT", TypeName = "nvarchar(max)")] public string? Comment { get; set; } [ForeignKey("UserReference")] public virtual User? Sender { get; set; } [ForeignKey("UserReference")] public virtual Receiver? Receiver { get; set; } [NotMapped] public ReferenceType ReferenceType => (Status / 1000) switch { 1 => ReferenceType.Sender, 2 or 3 => ReferenceType.Receiver, _ => ReferenceType.Unknown, }; [NotMapped] public string? StatusName => (Enum.IsDefined(typeof(EnvelopeStatus), Status)) ? Enum.GetName(typeof(EnvelopeStatus), Status) : null; } }