Tools/src/main/java/de/ph87/tools/group/Group.java
2024-11-06 14:52:02 +01:00

100 lines
2.0 KiB
Java

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
@JoinTable(name = "`group_user`")
private Set<User> users = new HashSet<>();
@NonNull
@ManyToMany
@ToString.Exclude
@JoinTable(name = "`group_banned`")
private Set<User> banned = 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);
@NonNull
@Column(nullable = false)
private ZonedDateTime lastAccess = created;
public Group(@NonNull final User owner) {
this.owner = owner;
}
public void touch() {
lastAccess = ZonedDateTime.now();
}
@Override
public List<Object> getWebsocketTopic() {
return List.of("Number", uuid);
}
public boolean isBanned(@NonNull final User user) {
return banned.stream().anyMatch(u -> u.equals(user));
}
}