AuditEntry.java

  1. package pk.lucidxpo.ynami.persistence.model;

  2. import jakarta.persistence.Column;
  3. import jakarta.persistence.Entity;
  4. import jakarta.persistence.Id;
  5. import jakarta.persistence.Lob;
  6. import lombok.Getter;
  7. import lombok.NoArgsConstructor;
  8. import lombok.ToString;

  9. import java.time.Instant;

  10. import static java.time.temporal.ChronoUnit.MICROS;
  11. import static pk.lucidxpo.ynami.utils.Identity.randomID;

  12. @Entity
  13. @Getter
  14. @ToString
  15. @NoArgsConstructor
  16. public class AuditEntry {
  17.     @Id
  18.     @Column(nullable = false, updatable = false)
  19.     private final String id = randomID();

  20.     @Column(nullable = false)
  21.     private String changedEntityName;

  22.     @Column(nullable = false)
  23.     private String changedEntityId;

  24.     @Column(nullable = false)
  25.     private String fieldChanged;

  26.     @Lob
  27.     @Column //field can change from null
  28.     private String fromValue;

  29.     @Lob
  30.     @Column //field can change into null
  31.     private String toValue;

  32.     @Column(nullable = false)
  33.     private String changedBy;

  34.     @Column(nullable = false)
  35.     private Instant changedAt = Instant.now().truncatedTo(MICROS);

  36.     public AuditEntry(final String changedEntityName,
  37.                       final String changedEntityId,
  38.                       final String fieldChanged,
  39.                       final String fromValue,
  40.                       final String toValue,
  41.                       final String changedBy) {

  42.         this.changedEntityName = changedEntityName;
  43.         this.changedEntityId = changedEntityId;
  44.         this.fieldChanged = fieldChanged;
  45.         this.fromValue = fromValue;
  46.         this.toValue = toValue;
  47.         this.changedBy = changedBy;
  48.     }

  49.     public AuditEntry(final Instant changedAt,
  50.                       final String changedEntityName,
  51.                       final String changedEntityId,
  52.                       final String fieldChanged,
  53.                       final String fromValue,
  54.                       final String toValue,
  55.                       final String changedBy) {
  56.         this.changedAt = changedAt;
  57.         this.changedEntityName = changedEntityName;
  58.         this.changedEntityId = changedEntityId;
  59.         this.fieldChanged = fieldChanged;
  60.         this.fromValue = fromValue;
  61.         this.toValue = toValue;
  62.         this.changedBy = changedBy;
  63.     }
  64. }