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