From 2ecf7366c1ece993d1b297a3366f7169fb218027 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Mon, 6 May 2024 16:49:20 +0700 Subject: [PATCH] enabled GraphiQL and created base entities --- .../controller/graphql/GraphqlController.java | 27 +++++++++++++++ .../controller/graphql/entity/EntityNode.java | 21 ++++++++++++ .../controller/graphql/entity/EntityRoom.java | 33 +++++++++++++++++++ .../controller/graphql/entity/EntityUser.java | 17 ++++++++++ server/src/main/resources/application.yml | 5 +++ .../main/resources/graphql/schema.graphqls | 24 ++++++++++++++ 6 files changed, 127 insertions(+) create mode 100644 server/src/main/java/ru/dragonestia/picker/controller/graphql/GraphqlController.java create mode 100644 server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityNode.java create mode 100644 server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityRoom.java create mode 100644 server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityUser.java create mode 100644 server/src/main/resources/graphql/schema.graphqls diff --git a/server/src/main/java/ru/dragonestia/picker/controller/graphql/GraphqlController.java b/server/src/main/java/ru/dragonestia/picker/controller/graphql/GraphqlController.java new file mode 100644 index 0000000..bf764b8 --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/controller/graphql/GraphqlController.java @@ -0,0 +1,27 @@ +package ru.dragonestia.picker.controller.graphql; + +import lombok.RequiredArgsConstructor; +import org.springframework.graphql.data.method.annotation.QueryMapping; +import org.springframework.stereotype.Controller; +import ru.dragonestia.picker.controller.graphql.entity.EntityNode; +import ru.dragonestia.picker.service.NodeService; +import ru.dragonestia.picker.service.RoomService; +import ru.dragonestia.picker.service.UserService; + +import java.util.List; + +@Controller +@RequiredArgsConstructor +public class GraphqlController { + + private final NodeService nodeService; + private final RoomService roomService; + private final UserService userService; + + @QueryMapping + List allNodes() { + return nodeService.all().stream() + .map(EntityNode::new) + .toList(); + } +} diff --git a/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityNode.java b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityNode.java new file mode 100644 index 0000000..a996a9c --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityNode.java @@ -0,0 +1,21 @@ +package ru.dragonestia.picker.controller.graphql.entity; + +import jakarta.validation.constraints.NotNull; +import ru.dragonestia.picker.model.Node; + +public class EntityNode { + + private final Node node; + + public EntityNode(Node node) { + this.node = node; + } + + public @NotNull String getId() { + return node.getIdentifier(); + } + + public @NotNull String getMethod() { + return node.getPickingMethod().name(); + } +} diff --git a/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityRoom.java b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityRoom.java new file mode 100644 index 0000000..36510c5 --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityRoom.java @@ -0,0 +1,33 @@ +package ru.dragonestia.picker.controller.graphql.entity; + +import jakarta.validation.constraints.NotNull; +import ru.dragonestia.picker.model.Room; + +public class EntityRoom { + + private final Room room; + + public EntityRoom(@NotNull Room room) { + this.room = room; + } + + public @NotNull String getId() { + return room.getIdentifier(); + } + + public @NotNull String getNodeId() { + return room.getNodeIdentifier(); + } + + public int getSlots() { + return room.getMaxSlots(); + } + + public @NotNull String getPayload() { + return room.getPayload(); + } + + public boolean isLocked() { + return room.isLocked(); + } +} diff --git a/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityUser.java b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityUser.java new file mode 100644 index 0000000..8c9d8bc --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityUser.java @@ -0,0 +1,17 @@ +package ru.dragonestia.picker.controller.graphql.entity; + +import jakarta.validation.constraints.NotNull; +import ru.dragonestia.picker.model.User; + +public class EntityUser { + + private final User user; + + public EntityUser(@NotNull User user) { + this.user = user; + } + + public @NotNull String getId() { + return user.getIdentifier(); + } +} diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml index d95bb10..be0e9b8 100644 --- a/server/src/main/resources/application.yml +++ b/server/src/main/resources/application.yml @@ -15,3 +15,8 @@ springdoc: swagger-ui: path: /api-docs-ui default-models-expand-depth: -1 + +spring: + graphql: + graphiql: + enabled: true diff --git a/server/src/main/resources/graphql/schema.graphqls b/server/src/main/resources/graphql/schema.graphqls new file mode 100644 index 0000000..58c2fb6 --- /dev/null +++ b/server/src/main/resources/graphql/schema.graphqls @@ -0,0 +1,24 @@ +type Query { + allNodes: [Node] + nodeById(id: String!): Node + allRooms(nodeId: String!): [Room] + roomById(nodeId: String!, roomId: String!): Room + roomUsers(nodeId: String!, roomId: String!): [User] +} + +type Node { + id: String! + method: String! +} + +type Room { + id: String! + nodeId: String! + slots: Int! + payload: String! + locked: Boolean! +} + +type User { + id: String! +}