49 lines
1.3 KiB
Java
49 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(); }
|
|
}
|