added more data for entities

This commit is contained in:
Andrey Terentev 2024-05-06 17:17:01 +07:00 committed by Andrey Terentev
parent 2ecf7366c1
commit bff4db3e0f
6 changed files with 117 additions and 22 deletions

View File

@ -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();
} }
} }

View File

@ -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();
}
} }

View File

@ -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();
}
} }

View File

@ -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();
}
} }

View File

@ -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) {}

View File

@ -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!
} }