55/// </summary>
66public abstract class Auditable : IAuditable
77{
8+ public const int CreatedByMaxLength = 128 ;
9+ public const int UpdatedByMaxLength = 128 ;
10+
11+ private const string SystemUser = "System" ;
12+ private string _createdBy = null ! ;
13+ private string ? _updatedBy ;
14+
815 public DateTimeOffset CreatedAt { get ; private set ; }
9- public string ? CreatedBy { get ; private set ; }
16+
17+ public string CreatedBy
18+ {
19+ get => _createdBy ;
20+ private set
21+ {
22+ ThrowIfNullOrWhiteSpace ( value , nameof ( CreatedBy ) ) ;
23+ ThrowIfGreaterThan ( value . Length , CreatedByMaxLength , nameof ( CreatedBy ) ) ;
24+ _createdBy = value ;
25+ }
26+ }
27+
1028 public DateTimeOffset ? UpdatedAt { get ; private set ; }
11- public string ? UpdatedBy { get ; private set ; }
1229
13- public void SetCreated ( DateTimeOffset createdAt , string ? createdBy )
30+ public string ? UpdatedBy
31+ {
32+ get => _updatedBy ;
33+ private set
34+ {
35+ ThrowIfNullOrWhiteSpace ( value , nameof ( UpdatedBy ) ) ;
36+ ThrowIfGreaterThan ( value . Length , UpdatedByMaxLength , nameof ( UpdatedBy ) ) ;
37+ _updatedBy = value ;
38+ }
39+ }
40+
41+ public void SetCreated ( TimeProvider timeProvider , string ? createdBy )
1442 {
15- CreatedAt = createdAt ;
16- CreatedBy = createdBy ;
43+ CreatedAt = timeProvider . GetUtcNow ( ) ;
44+ CreatedBy = createdBy ?? SystemUser ;
1745 }
1846
19- public void SetUpdated ( DateTimeOffset updatedAt , string ? updatedBy )
47+ public void SetUpdated ( TimeProvider timeProvider , string ? updatedBy )
2048 {
21- UpdatedAt = updatedAt ;
22- UpdatedBy = updatedBy ;
49+ UpdatedAt = timeProvider . GetUtcNow ( ) ;
50+ UpdatedBy = updatedBy ?? SystemUser ;
2351 }
2452}
0 commit comments