View Javadoc
1   package pk.lucidxpo.ynami.persistence.model;
2   
3   import jakarta.persistence.Column;
4   import jakarta.persistence.Entity;
5   import jakarta.persistence.Id;
6   import jakarta.persistence.Lob;
7   import lombok.Getter;
8   import lombok.NoArgsConstructor;
9   import lombok.ToString;
10  
11  import java.time.Instant;
12  
13  import static java.time.temporal.ChronoUnit.MICROS;
14  import static pk.lucidxpo.ynami.utils.Identity.randomID;
15  
16  @Entity
17  @Getter
18  @ToString
19  @NoArgsConstructor
20  public class AuditEntry {
21      @Id
22      @Column(nullable = false, updatable = false)
23      private final String id = randomID();
24  
25      @Column(nullable = false)
26      private String changedEntityName;
27  
28      @Column(nullable = false)
29      private String changedEntityId;
30  
31      @Column(nullable = false)
32      private String fieldChanged;
33  
34      @Lob
35      @Column //field can change from null
36      private String fromValue;
37  
38      @Lob
39      @Column //field can change into null
40      private String toValue;
41  
42      @Column(nullable = false)
43      private String changedBy;
44  
45      @Column(nullable = false)
46      private Instant changedAt = Instant.now().truncatedTo(MICROS);
47  
48      public AuditEntry(final String changedEntityName,
49                        final String changedEntityId,
50                        final String fieldChanged,
51                        final String fromValue,
52                        final String toValue,
53                        final String changedBy) {
54  
55          this.changedEntityName = changedEntityName;
56          this.changedEntityId = changedEntityId;
57          this.fieldChanged = fieldChanged;
58          this.fromValue = fromValue;
59          this.toValue = toValue;
60          this.changedBy = changedBy;
61      }
62  
63      public AuditEntry(final Instant changedAt,
64                        final String changedEntityName,
65                        final String changedEntityId,
66                        final String fieldChanged,
67                        final String fromValue,
68                        final String toValue,
69                        final String changedBy) {
70          this.changedAt = changedAt;
71          this.changedEntityName = changedEntityName;
72          this.changedEntityId = changedEntityId;
73          this.fieldChanged = fieldChanged;
74          this.fromValue = fromValue;
75          this.toValue = toValue;
76          this.changedBy = changedBy;
77      }
78  }