Add audit interfaces and fields to domain entities

Introduced interfaces for audit fields (AddedWhen, ChangedWhen, ChangedWho, AddedWho) and updated domain entities to implement them. Adjusted properties for consistency and nullability. Updated MappingProfile to map audit fields between DTOs and entities. Improves auditability and standardization across the domain model.
This commit is contained in:
2026-02-09 15:11:42 +01:00
parent 0fb94decdd
commit e2afbc5a62
15 changed files with 128 additions and 78 deletions

View File

@@ -28,8 +28,8 @@ public class MappingProfile : Profile
CreateMap<EmailTemplate, EmailTemplateDto>(); CreateMap<EmailTemplate, EmailTemplateDto>();
CreateMap<Envelope, EnvelopeDto>(); CreateMap<Envelope, EnvelopeDto>();
CreateMap<Document, DocumentDto>(); CreateMap<Document, DocumentDto>();
CreateMap<Domain.Entities.History, HistoryDto>(); CreateMap<Domain.Entities.History, HistoryDto>().ForMember(dest => dest.ActionDate, opt => opt.MapFrom(src => src.ChangedWhen));
CreateMap<Domain.Entities.History, HistoryCreateDto>(); CreateMap<Domain.Entities.History, HistoryCreateDto>().ForMember(dest => dest.ActionDate, opt => opt.MapFrom(src => src.ChangedWhen));
CreateMap<Domain.Entities.EnvelopeReceiver, EnvelopeReceiverDto>(); CreateMap<Domain.Entities.EnvelopeReceiver, EnvelopeReceiverDto>();
CreateMap<Domain.Entities.EnvelopeReceiver, EnvelopeReceiverSecretDto>(); CreateMap<Domain.Entities.EnvelopeReceiver, EnvelopeReceiverSecretDto>();
CreateMap<EnvelopeType, EnvelopeTypeDto>(); CreateMap<EnvelopeType, EnvelopeTypeDto>();
@@ -44,8 +44,8 @@ public class MappingProfile : Profile
CreateMap<EmailTemplateDto, EmailTemplate>(); CreateMap<EmailTemplateDto, EmailTemplate>();
CreateMap<EnvelopeDto, Envelope>(); CreateMap<EnvelopeDto, Envelope>();
CreateMap<DocumentDto, Document>(); CreateMap<DocumentDto, Document>();
CreateMap<HistoryDto, Domain.Entities.History>(); CreateMap<HistoryDto, Domain.Entities.History>().ForMember(dest => dest.ChangedWhen, opt => opt.MapFrom(src => src.ActionDate));
CreateMap<HistoryCreateDto, Domain.Entities.History>(); CreateMap<HistoryCreateDto, Domain.Entities.History>().ForMember(dest => dest.ChangedWhen, opt => opt.MapFrom(src => src.ActionDate));
CreateMap<EnvelopeReceiverDto, Domain.Entities.EnvelopeReceiver>(); CreateMap<EnvelopeReceiverDto, Domain.Entities.EnvelopeReceiver>();
CreateMap<EnvelopeTypeDto, EnvelopeType>(); CreateMap<EnvelopeTypeDto, EnvelopeType>();
CreateMap<ReceiverDto, Domain.Entities.Receiver>().ForMember(rcv => rcv.EnvelopeReceivers, rcvReadDto => rcvReadDto.Ignore()); CreateMap<ReceiverDto, Domain.Entities.Receiver>().ForMember(rcv => rcv.EnvelopeReceivers, rcvReadDto => rcvReadDto.Ignore());

View File

@@ -1,4 +1,5 @@
using EnvelopeGenerator.Domain.Interfaces; using System;
using EnvelopeGenerator.Domain.Interfaces;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK #if NETFRAMEWORK
@@ -11,11 +12,11 @@ namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_ENVELOPE_DOCUMENT", Schema = "dbo")] [Table("TBSIG_ENVELOPE_DOCUMENT", Schema = "dbo")]
public class Document : IHasEnvelope public class Document : IHasEnvelope, IHasAddedWhen
{ {
public Document() public Document()
{ {
@@ -36,9 +37,13 @@ public class Document : IHasEnvelope
= 0; = 0;
#endif #endif
[Required]
[Column("ADDED_WHEN", TypeName = "datetime")]
public DateTime AddedWhen { get; set; }
[Column("BYTE_DATA", TypeName = "varbinary(max)")] [Column("BYTE_DATA", TypeName = "varbinary(max)")]
public byte[] public byte[]
#if NET #if nullable
? ?
#endif #endif
ByteData { get; set; } ByteData { get; set; }
@@ -52,21 +57,21 @@ public class Document : IHasEnvelope
[Column("FILENAME_ORIGINAL", TypeName = "nvarchar(256)")] [Column("FILENAME_ORIGINAL", TypeName = "nvarchar(256)")]
public string public string
#if NET #if nullable
? ?
#endif #endif
FileNameOriginal { get; set; } FileNameOriginal { get; set; }
#endregion #endregion
public virtual List<Signature> public virtual List<Signature>
#if NET #if nullable
? ?
#endif #endif
Elements { get; set; } Elements { get; set; }
[ForeignKey("EnvelopeId")] [ForeignKey("EnvelopeId")]
public virtual Envelope public virtual Envelope
#if NET #if nullable
? ?
#endif #endif
Envelope { get; set; } Envelope { get; set; }

View File

@@ -1,21 +1,21 @@
using System.ComponentModel.DataAnnotations; using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using DigitalData.Core.Abstractions.Interfaces; using DigitalData.Core.Abstractions.Interfaces;
using EnvelopeGenerator.Domain.Interfaces; using EnvelopeGenerator.Domain.Interfaces;
#if NETFRAMEWORK #if NETFRAMEWORK
using System;
#endif #endif
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_DOCUMENT_STATUS", Schema = "dbo")] [Table("TBSIG_DOCUMENT_STATUS", Schema = "dbo")]
public class DocumentStatus : IHasEnvelope, IHasReceiver, IEntity public class DocumentStatus : IHasEnvelope, IHasReceiver, IEntity, IHasAddedWhen, IHasChangedWhen
{ {
public DocumentStatus() public DocumentStatus()
{ {
@@ -42,6 +42,13 @@ public class DocumentStatus : IHasEnvelope, IHasReceiver, IEntity
[Column("STATUS")] [Column("STATUS")]
public Constants.DocumentStatus Status { get; set; } public Constants.DocumentStatus Status { get; set; }
[Required]
[Column("ADDED_WHEN", TypeName = "datetime")]
public DateTime AddedWhen { get; set; }
[Column("CHANGED_WHEN", TypeName = "datetime")]
public DateTime? ChangedWhen { get; set; }
[Column("VALUE", TypeName = "nvarchar(max)")] [Column("VALUE", TypeName = "nvarchar(max)")]
public string Value { get; set; } public string Value { get; set; }

View File

@@ -1,18 +1,19 @@
using System.ComponentModel.DataAnnotations; using System;
using EnvelopeGenerator.Domain.Interfaces;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK #if NETFRAMEWORK
using System;
#endif #endif
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_DOCUMENT_RECEIVER_ELEMENT_ANNOTATION")] [Table("TBSIG_DOCUMENT_RECEIVER_ELEMENT_ANNOTATION")]
public class ElementAnnotation public class ElementAnnotation : IHasAddedWhen, IHasChangedWhen, IHasChangedWho
{ {
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
@@ -74,14 +75,14 @@ public class ElementAnnotation
[Column("CHANGED_WHO", TypeName = "nvarchar(100)")] [Column("CHANGED_WHO", TypeName = "nvarchar(100)")]
[StringLength(100)] [StringLength(100)]
public string public string
#if NET #if nullable
? ?
#endif #endif
ChangedWho { get; set; } ChangedWho { get; set; }
[ForeignKey("ElementId")] [ForeignKey("ElementId")]
public virtual Signature public virtual Signature
#if NET #if nullable
? ?
#endif #endif
Element { get; set; } Element { get; set; }

View File

@@ -1,20 +1,21 @@
using DigitalData.Core.Abstractions.Interfaces; using System;
using DigitalData.Core.Abstractions.Interfaces;
using EnvelopeGenerator.Domain.Interfaces;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK #if NETFRAMEWORK
using System;
#endif #endif
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_EMAIL_TEMPLATE", Schema = "dbo")] [Table("TBSIG_EMAIL_TEMPLATE", Schema = "dbo")]
public class EmailTemplate : IEntity public class EmailTemplate : IEntity, IHasAddedWhen, IHasChangedWhen
{ {
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
@@ -36,7 +37,7 @@ public class EmailTemplate : IEntity
public DateTime AddedWhen { get; set; } public DateTime AddedWhen { get; set; }
[Column("CHANGED_WHEN", TypeName = "datetime")] [Column("CHANGED_WHEN", TypeName = "datetime")]
public DateTime ChangedWhen { get; set; } public DateTime? ChangedWhen { get; set; }
} }
#if NETFRAMEWORK #if NETFRAMEWORK

View File

@@ -1,11 +1,12 @@
using DigitalData.UserManager.Domain.Entities; using System;
using EnvelopeGenerator.Domain.Interfaces;
using DigitalData.UserManager.Domain.Entities;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using Newtonsoft.Json; using Newtonsoft.Json;
#if NETFRAMEWORK #if NETFRAMEWORK
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
#endif #endif
@@ -14,11 +15,11 @@ namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_ENVELOPE", Schema = "dbo")] [Table("TBSIG_ENVELOPE", Schema = "dbo")]
public class Envelope public class Envelope : IHasAddedWhen, IHasChangedWhen
{ {
public Envelope() public Envelope()
{ {
@@ -77,7 +78,7 @@ public class Envelope
[Column("TITLE", TypeName = "nvarchar(128)")] [Column("TITLE", TypeName = "nvarchar(128)")]
public string public string
#if NET #if nullable
? ?
#endif #endif
Title { get; set; } Title { get; set; }
@@ -142,15 +143,14 @@ public class Envelope
[NotMapped] [NotMapped]
[Column("DOC_RESULT")] [Column("DOC_RESULT")]
public byte[] public byte[]
#if NET #if nullable
? ?
#endif #endif
DocResult DocResult { get; set; }
{ get; set; }
[ForeignKey("EnvelopeTypeId")] [ForeignKey("EnvelopeTypeId")]
public virtual EnvelopeType public virtual EnvelopeType
#if NET #if nullable
? ?
#endif #endif
Type { get; set; } Type { get; set; }
@@ -164,19 +164,19 @@ public class Envelope
#endif #endif
public List<Document> public List<Document>
#if NET #if nullable
? ?
#endif #endif
Documents { get; set; } Documents { get; set; }
public List<History> public List<History>
#if NET #if nullable
? ?
#endif #endif
Histories { get; set; } Histories { get; set; }
public List<EnvelopeReceiver> public List<EnvelopeReceiver>
#if NET #if nullable
? ?
#endif #endif
EnvelopeReceivers { get; set; } EnvelopeReceivers { get; set; }

View File

@@ -1,21 +1,21 @@
using System.ComponentModel.DataAnnotations; using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using DigitalData.Core.Abstractions.Interfaces; using DigitalData.Core.Abstractions.Interfaces;
using EnvelopeGenerator.Domain.Interfaces; using EnvelopeGenerator.Domain.Interfaces;
#if NETFRAMEWORK #if NETFRAMEWORK
using System;
#endif #endif
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_ENVELOPE_RECEIVER", Schema = "dbo")] [Table("TBSIG_ENVELOPE_RECEIVER", Schema = "dbo")]
public class EnvelopeReceiver : IHasEnvelope, IHasReceiver, IEntity public class EnvelopeReceiver : IHasEnvelope, IHasReceiver, IEntity, IHasAddedWhen, IHasChangedWhen
{ {
public EnvelopeReceiver() public EnvelopeReceiver()
{ {
@@ -42,7 +42,7 @@ public class EnvelopeReceiver : IHasEnvelope, IHasReceiver, IEntity
[Column("COMPANY_NAME", TypeName = "nvarchar(128)")] [Column("COMPANY_NAME", TypeName = "nvarchar(128)")]
public string public string
#if NET #if nullable
? ?
#endif #endif
CompanyName { get; set; } CompanyName { get; set; }
@@ -58,7 +58,7 @@ public class EnvelopeReceiver : IHasEnvelope, IHasReceiver, IEntity
public DateTime AddedWhen { get; set; } public DateTime AddedWhen { get; set; }
[Column("CHANGED_WHEN", TypeName = "datetime")] [Column("CHANGED_WHEN", TypeName = "datetime")]
public DateTime ChangedWhen { get; set; } public DateTime? ChangedWhen { get; set; }
[Column("PHONE_NUMBER")] [Column("PHONE_NUMBER")]
[StringLength(20)] [StringLength(20)]
@@ -73,14 +73,14 @@ public class EnvelopeReceiver : IHasEnvelope, IHasReceiver, IEntity
[ForeignKey("EnvelopeId")] [ForeignKey("EnvelopeId")]
public Envelope public Envelope
#if NET #if nullable
? ?
#endif #endif
Envelope { get; set; } Envelope { get; set; }
[ForeignKey("ReceiverId")] [ForeignKey("ReceiverId")]
public Receiver public Receiver
#if NET #if nullable
? ?
#endif #endif
Receiver { get; set; } Receiver { get; set; }

View File

@@ -1,14 +1,13 @@
using System.ComponentModel.DataAnnotations.Schema; using System;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using EnvelopeGenerator.Domain.Interfaces;
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes; using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
#if NETFRAMEWORK
using System;
#endif
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities
{ {
[Table("TBSIG_ENVELOPE_RECEIVER_READ_ONLY")] [Table("TBSIG_ENVELOPE_RECEIVER_READ_ONLY")]
public class EnvelopeReceiverReadOnly public class EnvelopeReceiverReadOnly : IHasAddedWhen, IHasChangedWhen, IHasAddedWho
{ {
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
@@ -42,16 +41,12 @@ namespace EnvelopeGenerator.Domain.Entities
[Column("ADDED_WHEN")] [Column("ADDED_WHEN")]
[Required] [Required]
public DateTime public DateTime AddedWhen { get; set; }
#if NET
?
#endif
AddedWhen { get; set; }
[Column("CHANGED_WHO")] [Column("CHANGED_WHO")]
[StringLength(100)] [StringLength(100)]
public string public string
#if NET #if nullable
? ?
#endif #endif
ChangedWho { get; set; } ChangedWho { get; set; }

View File

@@ -1,24 +1,20 @@
using DigitalData.UserManager.Domain.Entities; using System;
using DigitalData.UserManager.Domain.Entities;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using EnvelopeGenerator.Domain.Interfaces; using EnvelopeGenerator.Domain.Interfaces;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using DigitalData.Core.Abstractions.Interfaces; using DigitalData.Core.Abstractions.Interfaces;
#if NETFRAMEWORK
using System;
#endif
namespace EnvelopeGenerator.Domain.Entities namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_ENVELOPE_HISTORY", Schema = "dbo")] [Table("TBSIG_ENVELOPE_HISTORY", Schema = "dbo")]
public class History : IHasEnvelope, IHasReceiver, IEntity public class History : IHasEnvelope, IHasReceiver, IEntity, IHasAddedWhen, IHasChangedWhen
{ {
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
@@ -43,7 +39,7 @@ public class History : IHasEnvelope, IHasReceiver, IEntity
public DateTime AddedWhen { get; set; } public DateTime AddedWhen { get; set; }
[Column("ACTION_DATE", TypeName = "datetime")] [Column("ACTION_DATE", TypeName = "datetime")]
public DateTime? ActionDate { get; set; } = DateTime.Now; public DateTime? ChangedWhen { get; set; }
[Column("COMMENT", TypeName = "nvarchar(max)")] [Column("COMMENT", TypeName = "nvarchar(max)")]
public string public string

View File

@@ -1,8 +1,9 @@
using System.ComponentModel.DataAnnotations; using System;
using EnvelopeGenerator.Domain.Interfaces;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Drawing; using System.Drawing;
#if NETFRAMEWORK #if NETFRAMEWORK
using System;
using System.Collections.Generic; using System.Collections.Generic;
#endif #endif
@@ -10,11 +11,11 @@ namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_RECEIVER", Schema = "dbo")] [Table("TBSIG_RECEIVER", Schema = "dbo")]
public class Receiver public class Receiver : IHasAddedWhen
{ {
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

View File

@@ -1,9 +1,9 @@
using EnvelopeGenerator.Domain.Interfaces; using System;
using EnvelopeGenerator.Domain.Interfaces;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK #if NETFRAMEWORK
using System;
using System.Collections.Generic; using System.Collections.Generic;
#endif #endif
@@ -11,11 +11,11 @@ namespace EnvelopeGenerator.Domain.Entities
#if NET #if NET
; ;
#elif NETFRAMEWORK #elif NETFRAMEWORK
{ {
#endif #endif
[Table("TBSIG_DOCUMENT_RECEIVER_ELEMENT", Schema = "dbo")] [Table("TBSIG_DOCUMENT_RECEIVER_ELEMENT", Schema = "dbo")]
public class Signature : ISignature, IHasReceiver public class Signature : ISignature, IHasReceiver, IHasAddedWhen, IHasChangedWhen, IHasChangedWho
{ {
public Signature() public Signature()
{ {
@@ -92,14 +92,14 @@ public class Signature : ISignature, IHasReceiver
[Required] [Required]
[Column("ADDED_WHEN", TypeName = "datetime")] [Column("ADDED_WHEN", TypeName = "datetime")]
[DefaultValue("GETDATE()")] [DefaultValue("GETDATE()")]
public DateTime? AddedWhen { get; set; } public DateTime AddedWhen { get; set; }
[Column("CHANGED_WHEN", TypeName = "datetime")] [Column("CHANGED_WHEN", TypeName = "datetime")]
public DateTime? ChangedWhen { get; set; } public DateTime? ChangedWhen { get; set; }
[Column("CHANGED_WHO", TypeName = "nvarchar(100)")] [Column("CHANGED_WHO", TypeName = "nvarchar(100)")]
public string public string
#if NET #if nullable
? ?
#endif #endif
ChangedWho { get; set; } ChangedWho { get; set; }
@@ -109,13 +109,13 @@ public class Signature : ISignature, IHasReceiver
[ForeignKey("ReceiverId")] [ForeignKey("ReceiverId")]
public virtual Receiver public virtual Receiver
#if NET #if nullable
? ?
#endif #endif
Receiver { get; set; } Receiver { get; set; }
public virtual IEnumerable<ElementAnnotation> public virtual IEnumerable<ElementAnnotation>
#if NET #if nullable
? ?
#endif #endif
Annotations { get; set; } Annotations { get; set; }

View File

@@ -0,0 +1,11 @@
#if NETFRAMEWORK
using System;
#endif
namespace EnvelopeGenerator.Domain.Interfaces
{
public interface IHasAddedWhen
{
DateTime AddedWhen { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
#if NETFRAMEWORK
using System;
#endif
namespace EnvelopeGenerator.Domain.Interfaces
{
public interface IHasAddedWho
{
string AddedWho { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
#if NETFRAMEWORK
using System;
#endif
namespace EnvelopeGenerator.Domain.Interfaces
{
public interface IHasChangedWhen
{
DateTime? ChangedWhen { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
namespace EnvelopeGenerator.Domain.Interfaces
{
public interface IHasChangedWho
{
string
#if nullable
?
#endif
ChangedWho { get; set; }
}
}