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
36 private String fromValue;
37
38 @Lob
39 @Column
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 }