package de.ph87.tools.group; import de.ph87.tools.group.uuid.GroupAbstract; import de.ph87.tools.group.uuid.GroupUuid; import de.ph87.tools.user.User; import de.ph87.tools.web.IWebSocketMessage; import jakarta.persistence.*; import lombok.*; import java.time.ZonedDateTime; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; @Entity @Getter @ToString @NoArgsConstructor @Table(name = "`group`") public class Group extends GroupAbstract implements IWebSocketMessage { @Id @NonNull @Getter(AccessLevel.NONE) private String uuid = UUID.randomUUID().toString(); @Transient @ToString.Exclude private GroupUuid _uuid; @NonNull public GroupUuid getUuid() { if (_uuid == null) { _uuid = new GroupUuid(uuid); } return _uuid; } @NonNull @ToString.Exclude @ManyToOne(optional = false) private User owner; @NonNull @ToString.Include public String ownerPublicUuid() { return getOwner().getPublicUuid().toString(); } @NonNull @Column(nullable = false) private ZonedDateTime created = ZonedDateTime.now(); @NonNull @ManyToMany @ToString.Exclude private Set users = new HashSet<>(); @Setter @NonNull @Column(nullable = false) private String title = "Ohne Namen"; @Setter @NonNull @ToString.Exclude @Column(nullable = false) private String password = UUID.randomUUID().toString().substring(0, 4); @Setter @Column(nullable = false) private boolean initial = true; @NonNull @Column(nullable = false) private ZonedDateTime lastAccess = created; protected Group(@NonNull final User owner) { this.owner = owner; } public void touch() { lastAccess = ZonedDateTime.now(); } @Override public List getWebsocketTopic() { return List.of("Number", uuid); } }