100 lines
2.0 KiB
Java
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));
|
|
}
|
|
|
|
}
|