improved Audit
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
/*
|
||||
/*
|
||||
* Copyright 2019 Joern Muehlencord (joern@muehlencord.de).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@ -15,77 +15,119 @@
|
||||
*/
|
||||
package de.muehlencord.shared.db;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import javax.persistence.Basic;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Embeddable;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Joern Muehlencord (joern@muehlencord.de)
|
||||
*/
|
||||
@Embeddable
|
||||
@Getter
|
||||
@Setter
|
||||
public class Audit implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -955765069412891842L;
|
||||
private static final long serialVersionUID = -955765069412891842L;
|
||||
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "created_on")
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
private Date createdOn;
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "valid_from")
|
||||
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
|
||||
@JsonSerialize(using = LocalDateTimeSerializer.class)
|
||||
private LocalDateTime validFrom;
|
||||
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "created_by")
|
||||
private String createdBy;
|
||||
@Column(name = "valid_to")
|
||||
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
|
||||
@JsonSerialize(using = LocalDateTimeSerializer.class)
|
||||
private LocalDateTime validTo;
|
||||
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "last_updated_on")
|
||||
@Temporal(TemporalType.TIMESTAMP)
|
||||
private Date lastUpdatedOn;
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "created_on")
|
||||
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
|
||||
@JsonSerialize(using = LocalDateTimeSerializer.class)
|
||||
private LocalDateTime createdOn;
|
||||
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "last_updated_by")
|
||||
private String lastUpdatedBy;
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "created_by")
|
||||
private String createdBy;
|
||||
|
||||
/* getter / setter */
|
||||
public Date getCreatedOn() {
|
||||
return createdOn;
|
||||
}
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "last_updated_on")
|
||||
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
|
||||
@JsonSerialize(using = LocalDateTimeSerializer.class)
|
||||
private LocalDateTime lastUpdatedOn;
|
||||
|
||||
public void setCreatedOn(Date createdOn) {
|
||||
this.createdOn = createdOn;
|
||||
}
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "last_updated_by")
|
||||
private String lastUpdatedBy;
|
||||
|
||||
public String getCreatedBy() {
|
||||
return createdBy;
|
||||
}
|
||||
public Audit() {
|
||||
this.validFrom = LocalDateTime.now(ZoneOffset.UTC);
|
||||
this.lastUpdatedOn = LocalDateTime.now(ZoneOffset.UTC);
|
||||
this.createdOn = LocalDateTime.now(ZoneOffset.UTC);
|
||||
}
|
||||
|
||||
public void setCreatedBy(String createdBy) {
|
||||
this.createdBy = createdBy;
|
||||
}
|
||||
public Audit withNewAudit(String userName) {
|
||||
LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
|
||||
this.setCreatedBy(userName);
|
||||
this.setCreatedOn(now);
|
||||
this.setLastUpdatedBy(userName);
|
||||
this.setLastUpdatedOn(now);
|
||||
this.setValidFrom(now);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Date getLastUpdatedOn() {
|
||||
return lastUpdatedOn;
|
||||
}
|
||||
public Audit withEndDate() {
|
||||
return withEndDate (LocalDateTime.now(ZoneOffset.UTC));
|
||||
}
|
||||
|
||||
public void setLastUpdatedOn(Date lastUpdatedOn) {
|
||||
this.lastUpdatedOn = lastUpdatedOn;
|
||||
}
|
||||
private Audit withEndDate(LocalDateTime endDate) {
|
||||
this.setValidTo(endDate);
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getLastUpdatedBy() {
|
||||
return lastUpdatedBy;
|
||||
}
|
||||
public Audit withValidFrom(final LocalDateTime validFrom) {
|
||||
this.validFrom = validFrom;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setLastUpdatedBy(String lastUpdatedBy) {
|
||||
this.lastUpdatedBy = lastUpdatedBy;
|
||||
}
|
||||
public Audit withValidTo(final LocalDateTime validTo) {
|
||||
this.validTo = validTo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Audit withCreatedOn(final LocalDateTime createdOn) {
|
||||
this.createdOn = createdOn;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Audit withCreatedBy(final String createdBy) {
|
||||
this.createdBy = createdBy;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Audit withLastUpdatedOn(final LocalDateTime lastUpdatedOn) {
|
||||
this.lastUpdatedOn = lastUpdatedOn;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Audit withLastUpdatedBy(final String lastUpdatedBy) {
|
||||
this.lastUpdatedBy = lastUpdatedBy;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -16,12 +16,14 @@
|
||||
package de.muehlencord.shared.db;
|
||||
|
||||
import de.muehlencord.shared.util.DateUtil;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.Date;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Does not work, cannot Spring independet inject current username - implemented in AbstractController manually
|
||||
* Does not work, cannot Spring independent inject current username - implemented in AbstractController manually
|
||||
* @author Joern Muehlencord (joern@muehlencord.de)
|
||||
*/
|
||||
public class AuditListener {
|
||||
@ -37,8 +39,7 @@ public class AuditListener {
|
||||
auditable.setAudit(audit);
|
||||
}
|
||||
|
||||
// LocalDateTime now = LocalDateTime.now();
|
||||
Date now = DateUtil.getCurrentTimeInUTC();
|
||||
LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
|
||||
audit.setCreatedOn(now);
|
||||
audit.setLastUpdatedOn(now);
|
||||
// audit.setCreatedBy(LoggedUser.get()); // TODO where to get the user from
|
||||
@ -52,8 +53,8 @@ public class AuditListener {
|
||||
public void preUpdate(Auditable auditable) {
|
||||
Audit audit = auditable.getAudit();
|
||||
|
||||
// LocalDateTime now = LocalDateTime.now();
|
||||
Date now = DateUtil.getCurrentTimeInUTC();
|
||||
LocalDateTime now = LocalDateTime.now(ZoneOffset.UTC);
|
||||
// Date now = DateUtil.getCurrentTimeInUTC();
|
||||
audit.setLastUpdatedOn(now);
|
||||
// audit.setUpdatedBy(LoggedUser.get()); // TODO where to get the user from
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
|
||||
@ -17,6 +17,9 @@ package de.muehlencord.shared.db;
|
||||
|
||||
import de.muehlencord.shared.util.DateUtil;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
@ -219,10 +222,10 @@ public abstract class CommonAbstractController {
|
||||
}
|
||||
if (onCreate) {
|
||||
audit.setCreatedBy(changedBy);
|
||||
audit.setCreatedOn(DateUtil.getCurrentTimeInUTC());
|
||||
audit.setCreatedOn(LocalDateTime.now(ZoneOffset.UTC));
|
||||
}
|
||||
audit.setLastUpdatedBy(changedBy);
|
||||
audit.setLastUpdatedOn(DateUtil.getCurrentTimeInUTC());
|
||||
audit.setLastUpdatedOn(LocalDateTime.now(ZoneOffset.UTC));
|
||||
|
||||
return audit;
|
||||
}
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
package de.muehlencord.shared.db;
|
||||
|
||||
import java.io.Serializable;
|
||||
import javax.persistence.Basic;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.MappedSuperclass;
|
||||
|
||||
@MappedSuperclass
|
||||
public abstract class NumericallyIdentifiedEntity implements Serializable {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Basic(optional = false)
|
||||
private Long id;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user