updated audit table accroding to merchant panel
This commit is contained in:
@@ -6,75 +6,67 @@ import java.time.LocalDateTime;
|
||||
import jakarta.persistence.PrePersist;
|
||||
import jakarta.persistence.PreUpdate;
|
||||
|
||||
/**
|
||||
* Generic JPA entity listener that populates common audit fields on entities.
|
||||
*
|
||||
* Behavior:
|
||||
* - On PrePersist: sets createdAt/creationDate/createdEpochDate if present (only when null),
|
||||
* and forces isDeleted/deleted to false if those fields exist.
|
||||
* - On PreUpdate: sets modifiedDate/modifiedEpochDate/updatedAt/updatedOn if present.
|
||||
*
|
||||
* This uses reflection so entities don't need to extend a specific base class.
|
||||
*/
|
||||
public class AuditListener {
|
||||
|
||||
@PrePersist
|
||||
public void prePersist(Object entity) {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
setIfNull(entity, "createdAt", now);
|
||||
setIfNull(entity, "createdOn", now);
|
||||
setIfNull(entity, "creationDate", now == null ? null : now.toString());
|
||||
|
||||
// Creation fields
|
||||
setIfNull(entity, "createDateTime", now);
|
||||
setIfNull(entity, "createdBy", null); // handle manually in service if needed
|
||||
setIfNull(entity, "createdEpochDate", System.currentTimeMillis());
|
||||
|
||||
// Ensure isDeleted / deleted exists and is set to false on create
|
||||
// Set isDeleted = false on creation
|
||||
setAlways(entity, "isDeleted", Boolean.FALSE);
|
||||
}
|
||||
|
||||
/*@PreUpdate
|
||||
public void preUpdate(Object entity) {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
setIfNull(entity, "modifiedDate", now == null ? null : now.toString());
|
||||
setIfNull(entity, "modifiedEpochDate", System.currentTimeMillis());
|
||||
setIfNull(entity, "updatedAt", now);
|
||||
setIfNull(entity, "updatedOn", now);
|
||||
}
|
||||
*/
|
||||
/*
|
||||
* @PreUpdate public void preUpdate(Object entity) { LocalDateTime now =
|
||||
* LocalDateTime.now();
|
||||
*
|
||||
* // Update fields setAlways(entity, "updatedDateTime", now); setIfNull(entity,
|
||||
* "updatedBy", null); // you can override manually in service setAlways(entity,
|
||||
* "modifiedEpochDate", System.currentTimeMillis()); }
|
||||
*/
|
||||
private void setIfNull(Object entity, String fieldName, Object value) {
|
||||
try {
|
||||
Field f = findField(entity.getClass(), fieldName);
|
||||
if (f == null) return;
|
||||
|
||||
boolean accessible = f.canAccess(entity);
|
||||
f.setAccessible(true);
|
||||
Object current = f.get(entity);
|
||||
if (current == null && value != null) {
|
||||
|
||||
Object currentValue = f.get(entity);
|
||||
if (currentValue == null) {
|
||||
f.set(entity, value);
|
||||
}
|
||||
|
||||
f.setAccessible(accessible);
|
||||
} catch (Exception e) {
|
||||
// ignore reflection failures
|
||||
}
|
||||
} catch (Exception ignored) {}
|
||||
}
|
||||
|
||||
private void setAlways(Object entity, String fieldName, Object value) {
|
||||
try {
|
||||
Field f = findField(entity.getClass(), fieldName);
|
||||
if (f == null) return;
|
||||
|
||||
boolean accessible = f.canAccess(entity);
|
||||
f.setAccessible(true);
|
||||
|
||||
f.set(entity, value);
|
||||
|
||||
f.setAccessible(accessible);
|
||||
} catch (Exception e) {
|
||||
// ignore reflection failures
|
||||
}
|
||||
} catch (Exception ignored) {}
|
||||
}
|
||||
|
||||
private Field findField(Class<?> cls, String name) {
|
||||
Class<?> cur = cls;
|
||||
while (cur != null && cur != Object.class) {
|
||||
Class<?> current = cls;
|
||||
while (current != null && current != Object.class) {
|
||||
try {
|
||||
return cur.getDeclaredField(name);
|
||||
return current.getDeclaredField(name);
|
||||
} catch (NoSuchFieldException e) {
|
||||
cur = cur.getSuperclass();
|
||||
current = current.getSuperclass();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -17,25 +17,25 @@ import lombok.Setter;
|
||||
@Getter
|
||||
@Setter
|
||||
public abstract class Auditable {
|
||||
@Column(name = "create_date_time")
|
||||
private LocalDateTime createDateTime;
|
||||
|
||||
@Column(name = "created_at")
|
||||
private LocalDateTime createdAt;
|
||||
@Column(name = "updated_date_time")
|
||||
private LocalDateTime updatedDateTime;
|
||||
|
||||
@Column(name = "updated_at")
|
||||
private LocalDateTime updatedAt;
|
||||
@Column(name = "create_by")
|
||||
private LocalDateTime createdBy;
|
||||
|
||||
@Column(name = "created_on")
|
||||
private LocalDateTime createdOn;
|
||||
@Column(name = "updated_by")
|
||||
private LocalDateTime updatedBy;
|
||||
|
||||
@Column(name = "updated_on")
|
||||
private LocalDateTime updatedOn;
|
||||
@Column(name = "created_epoch_date")
|
||||
private Long createdEpochDate;
|
||||
|
||||
@Column(name = "created_epoch_date")
|
||||
private Long createdEpochDate;
|
||||
@Column(name = "modified_epoch_date")
|
||||
private Long modifiedEpochDate;
|
||||
|
||||
@Column(name = "modified_epoch_date")
|
||||
private Long modifiedEpochDate;
|
||||
|
||||
@Column(name = "is_deleted")
|
||||
private Boolean isDeleted = Boolean.FALSE;
|
||||
@Column(name = "is_deleted")
|
||||
private Boolean isDeleted = Boolean.FALSE;
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.billpaymentservice.bbps.entites;
|
||||
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.GeneratedValue;
|
||||
import jakarta.persistence.GenerationType;
|
||||
|
||||
Reference in New Issue
Block a user