48 lines
1.3 KiB
Java
48 lines
1.3 KiB
Java
package envoy.server.data;
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
import javax.persistence.*;
|
|
|
|
/**
|
|
* Represents a group inside the database. Referred to as "server group" as opposed to "group" from
|
|
* Envoy Common.
|
|
*
|
|
* @author Maximilian Käfer
|
|
* @since Envoy Server Standalone v0.1-alpha
|
|
*/
|
|
@Entity
|
|
@NamedQueries({
|
|
@NamedQuery(name = Group.findByName, query = "SELECT g FROM Group g WHERE g.name = :name"),
|
|
@NamedQuery(name = Group.findPendingGroups, query = "SELECT g FROM Group g WHERE g.creationDate > :lastSeen AND :user MEMBER OF g.contacts")
|
|
})
|
|
public final class Group extends Contact {
|
|
|
|
/**
|
|
* Named query retrieving a group by name (parameter {@code :name}).
|
|
*
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
public static final String findByName = "Group.findByName";
|
|
|
|
/**
|
|
* Named query retrieving all pending groups for a specific user (parameter {@code :user},
|
|
* {@code :lastSeen}).
|
|
*
|
|
* @since Envoy Server Standalone v0.1-beta
|
|
*/
|
|
public static final String findPendingGroups = "Group.findPendingGroups";
|
|
|
|
@Override
|
|
public envoy.data.Group toCommon() {
|
|
return new envoy.data.Group(id, name,
|
|
contacts.parallelStream().map(User.class::cast)
|
|
.map(User::toFlatCommon).collect(Collectors.toSet()));
|
|
}
|
|
|
|
@Override
|
|
protected envoy.data.Group toFlatCommon() {
|
|
return toCommon();
|
|
}
|
|
}
|