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