Data2025/src/main/java/de/ph87/data/topic/Topic.java

86 lines
1.8 KiB
Java

package de.ph87.data.topic;
import de.ph87.data.log.AbstractEntityLog;
import de.ph87.data.topic.query.TopicQuery;
import jakarta.persistence.Column;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
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;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@ToString
@NoArgsConstructor
public class Topic extends AbstractEntityLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Version
private long version;
@NonNull
@Column(nullable = false, unique = true)
private String name;
@Setter
@Column(nullable = false)
private boolean enabled = true;
@NonNull
@Column(nullable = false)
private ZonedDateTime first;
@NonNull
@Column(nullable = false)
private ZonedDateTime last;
@Column(nullable = false)
private int count;
@Setter
@NonNull
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private TimestampType timestampType = TimestampType.EPOCH_SECONDS;
@Setter
@NonNull
@Column(nullable = false)
private String timestampQuery = "";
@NonNull
@ToString.Exclude
@ElementCollection(fetch = FetchType.EAGER)
private List<TopicQuery> queries = new ArrayList<>();
public Topic(@NonNull final String name) {
this.name = name;
this.first = ZonedDateTime.now();
this.last = this.first;
this.count = 1;
}
public void update() {
this.last = ZonedDateTime.now();
this.count++;
}
}