added more data for entities
This commit is contained in:
parent
2ecf7366c1
commit
bff4db3e0f
@ -1,9 +1,9 @@
|
|||||||
package ru.dragonestia.picker.controller.graphql;
|
package ru.dragonestia.picker.controller.graphql;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import org.springframework.graphql.data.method.annotation.QueryMapping;
|
import org.springframework.graphql.data.method.annotation.QueryMapping;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import ru.dragonestia.picker.controller.graphql.entity.EntityNode;
|
import ru.dragonestia.picker.controller.graphql.entity.EntityNode;
|
||||||
|
import ru.dragonestia.picker.controller.graphql.entity.type.DataProvider;
|
||||||
import ru.dragonestia.picker.service.NodeService;
|
import ru.dragonestia.picker.service.NodeService;
|
||||||
import ru.dragonestia.picker.service.RoomService;
|
import ru.dragonestia.picker.service.RoomService;
|
||||||
import ru.dragonestia.picker.service.UserService;
|
import ru.dragonestia.picker.service.UserService;
|
||||||
@ -11,17 +11,24 @@ import ru.dragonestia.picker.service.UserService;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class GraphqlController {
|
public class GraphqlController {
|
||||||
|
|
||||||
private final NodeService nodeService;
|
private final NodeService nodeService;
|
||||||
private final RoomService roomService;
|
private final RoomService roomService;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
private final DataProvider dataProvider;
|
||||||
|
|
||||||
|
public GraphqlController(NodeService nodeService, RoomService roomService, UserService userService) {
|
||||||
|
this.nodeService = nodeService;
|
||||||
|
this.roomService = roomService;
|
||||||
|
this.userService = userService;
|
||||||
|
dataProvider = new DataProvider(nodeService, roomService, userService);
|
||||||
|
}
|
||||||
|
|
||||||
@QueryMapping
|
@QueryMapping
|
||||||
List<EntityNode> allNodes() {
|
List<EntityNode> allNodes() {
|
||||||
return nodeService.all().stream()
|
return nodeService.all().stream()
|
||||||
.map(EntityNode::new)
|
.map(node -> new EntityNode(node, dataProvider))
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,21 +1,43 @@
|
|||||||
package ru.dragonestia.picker.controller.graphql.entity;
|
package ru.dragonestia.picker.controller.graphql.entity;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import ru.dragonestia.picker.controller.graphql.entity.type.DataProvider;
|
||||||
import ru.dragonestia.picker.model.Node;
|
import ru.dragonestia.picker.model.Node;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class EntityNode {
|
public class EntityNode {
|
||||||
|
|
||||||
private final Node node;
|
private final Node node;
|
||||||
|
private final DataProvider dataProvider;
|
||||||
|
private List<EntityRoom> cachedRooms = null;
|
||||||
|
|
||||||
public EntityNode(Node node) {
|
public String getId() {
|
||||||
this.node = node;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull String getId() {
|
|
||||||
return node.getIdentifier();
|
return node.getIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull String getMethod() {
|
public String getMethod() {
|
||||||
return node.getPickingMethod().name();
|
return node.getPickingMethod().name();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<EntityRoom> getRooms() {
|
||||||
|
if (cachedRooms != null) {
|
||||||
|
return cachedRooms;
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedRooms = dataProvider.roomService().all(node).stream()
|
||||||
|
.map(room -> new EntityRoom(room, dataProvider))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return cachedRooms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCountRooms() {
|
||||||
|
return getRooms().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPersist() {
|
||||||
|
return node.isPersist();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,33 +1,61 @@
|
|||||||
package ru.dragonestia.picker.controller.graphql.entity;
|
package ru.dragonestia.picker.controller.graphql.entity;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import ru.dragonestia.picker.controller.graphql.entity.type.DataProvider;
|
||||||
import ru.dragonestia.picker.model.Room;
|
import ru.dragonestia.picker.model.Room;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class EntityRoom {
|
public class EntityRoom {
|
||||||
|
|
||||||
private final Room room;
|
private final Room room;
|
||||||
|
private final DataProvider dataProvider;
|
||||||
|
private List<EntityUser> cachedUsers = null;
|
||||||
|
|
||||||
public EntityRoom(@NotNull Room room) {
|
public String getId() {
|
||||||
this.room = room;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull String getId() {
|
|
||||||
return room.getIdentifier();
|
return room.getIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull String getNodeId() {
|
public String getNodeId() {
|
||||||
return room.getNodeIdentifier();
|
return room.getNodeIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EntityNode getNode() {
|
||||||
|
return dataProvider.nodeService().find(room.getNodeIdentifier())
|
||||||
|
.map(node -> new EntityNode(node, dataProvider))
|
||||||
|
.orElseThrow();
|
||||||
|
}
|
||||||
|
|
||||||
public int getSlots() {
|
public int getSlots() {
|
||||||
return room.getMaxSlots();
|
return room.getMaxSlots();
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull String getPayload() {
|
public String getPayload() {
|
||||||
return room.getPayload();
|
return room.getPayload();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLocked() {
|
public boolean isLocked() {
|
||||||
return room.isLocked();
|
return room.isLocked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<EntityUser> getUsers() {
|
||||||
|
if (cachedUsers != null) {
|
||||||
|
return cachedUsers;
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedUsers = dataProvider.userService().getRoomUsers(room).stream()
|
||||||
|
.map(user -> new EntityUser(user, dataProvider))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return cachedUsers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCountUsers() {
|
||||||
|
return getUsers().size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPersist() {
|
||||||
|
return room.isPersist();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,17 +1,36 @@
|
|||||||
package ru.dragonestia.picker.controller.graphql.entity;
|
package ru.dragonestia.picker.controller.graphql.entity;
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import ru.dragonestia.picker.controller.graphql.entity.type.DataProvider;
|
||||||
import ru.dragonestia.picker.model.User;
|
import ru.dragonestia.picker.model.User;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class EntityUser {
|
public class EntityUser {
|
||||||
|
|
||||||
private final User user;
|
private final User user;
|
||||||
|
private final DataProvider dataProvider;
|
||||||
public EntityUser(@NotNull User user) {
|
private List<EntityRoom> cachedRooms = null;
|
||||||
this.user = user;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull String getId() {
|
public @NotNull String getId() {
|
||||||
return user.getIdentifier();
|
return user.getIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<EntityRoom> getRooms() {
|
||||||
|
if (cachedRooms != null) {
|
||||||
|
return cachedRooms;
|
||||||
|
}
|
||||||
|
|
||||||
|
cachedRooms = dataProvider.userService().getUserRooms(user).stream()
|
||||||
|
.map(room -> new EntityRoom(room, dataProvider))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return cachedRooms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCountRooms() {
|
||||||
|
return getRooms().size();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,10 @@
|
|||||||
|
package ru.dragonestia.picker.controller.graphql.entity.type;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import ru.dragonestia.picker.service.NodeService;
|
||||||
|
import ru.dragonestia.picker.service.RoomService;
|
||||||
|
import ru.dragonestia.picker.service.UserService;
|
||||||
|
|
||||||
|
public record DataProvider(@NotNull NodeService nodeService,
|
||||||
|
@NotNull RoomService roomService,
|
||||||
|
@NotNull UserService userService) {}
|
||||||
@ -9,16 +9,25 @@ type Query {
|
|||||||
type Node {
|
type Node {
|
||||||
id: String!
|
id: String!
|
||||||
method: String!
|
method: String!
|
||||||
|
rooms: [Room]
|
||||||
|
countRooms: Int!
|
||||||
|
persist: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type Room {
|
type Room {
|
||||||
id: String!
|
id: String!
|
||||||
nodeId: String!
|
nodeId: String!
|
||||||
|
node: Node!
|
||||||
slots: Int!
|
slots: Int!
|
||||||
payload: String!
|
payload: String!
|
||||||
locked: Boolean!
|
locked: Boolean!
|
||||||
|
users: [User]
|
||||||
|
countUsers: Int!
|
||||||
|
persist: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type User {
|
type User {
|
||||||
id: String!
|
id: String!
|
||||||
|
rooms: [Room]
|
||||||
|
countRooms: Int!
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user