Data2025/src/main/java/de/ph87/data/series/Series.java

85 lines
1.9 KiB
Java

package de.ph87.data.series;
import de.ph87.data.log.AbstractEntityLog;
import jakarta.annotation.Nullable;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Version;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.NonNull;
import lombok.Setter;
import lombok.ToString;
import java.time.ZonedDateTime;
@Entity
@Getter
@ToString
@NoArgsConstructor
public class Series extends AbstractEntityLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Version
private long version;
@NonNull
@Column(nullable = false, unique = true)
private String name;
@Setter
@NonNull
@Column(nullable = false)
private String unit;
@Setter
@Column(nullable = false)
private int decimals;
@Column
@Nullable
private ZonedDateTime first = null;
@Column
@Nullable
private ZonedDateTime last = null;
@Nullable
@Column(name = "`value`")
private Double value = null;
@Setter
@Column(nullable = false)
private int expectedEverySeconds = 5;
@Setter
@NonNull
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private SeriesType type;
public Series(@NonNull final String name, @NonNull final String unit, final int decimals, final int expectedEverySeconds, @NonNull final SeriesType type) {
this.name = name;
this.unit = unit;
this.decimals = decimals;
this.expectedEverySeconds = expectedEverySeconds;
this.type = type;
}
public void update(@NonNull final ZonedDateTime timestamp, final double value) {
if (this.last == null || this.last.isBefore(timestamp)) {
this.last = timestamp;
this.value = value;
}
}
}