improved Audit

This commit is contained in:
2020-09-30 20:01:20 +02:00
parent c983bde031
commit 57907d05e6
6 changed files with 224 additions and 123 deletions

View File

@ -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;
}
}

View File

@ -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()) {

View File

@ -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;
}

View File

@ -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;
}
}