From cdb4f69a0fe7032a2a28a07a99400e700245ebb8 Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Fri, 10 May 2024 11:37:11 +0700 Subject: [PATCH] !renamed Node to Instance --- README.md | 4 +- .../api/exception/ExceptionFactory.java | 2 +- ...> InvalidInstanceIdentifierException.java} | 6 +- .../picker/api/model/room/IRoom.java | 6 +- .../picker/api/model/room/ResponseRoom.java | 16 +++--- .../picker/api/model/room/RoomDefinition.java | 2 +- .../api/model/room/ShortResponseRoom.java | 16 +++--- .../impl/repository/RoomRepositoryImpl.java | 4 +- .../picker/cp/page/RoomDetailsPage.java | 2 +- .../picker/cp/page/UserDetailsPage.java | 4 +- .../page/plug/InvalidNodeIdentifierPlug.java | 6 +- .../picker/aspect/UserMetricsAspect.java | 24 ++++---- .../dragonestia/picker/config/TestConfig.java | 22 +++---- .../ExceptionHandlerController.java | 4 +- .../picker/controller/NodeController.java | 10 ++-- .../picker/controller/RoomController.java | 10 ++-- .../picker/controller/UserRoomController.java | 6 +- .../controller/graphql/GraphqlController.java | 28 ++++----- .../{EntityNode.java => EntityInstance.java} | 14 ++--- .../controller/graphql/entity/EntityRoom.java | 10 ++-- .../graphql/entity/type/DataProvider.java | 4 +- .../picker/model/factory/RoomFactory.java | 6 +- .../Node.java => instance/Instance.java} | 10 ++-- .../dragonestia/picker/model/room/Room.java | 20 +++---- .../picker/repository/InstanceRepository.java | 18 ++++++ .../picker/repository/NodeRepository.java | 18 ------ .../picker/repository/RoomRepository.java | 8 +-- .../repository/impl/ContainerRepository.java | 20 +++---- .../impl/InstanceRepositoryImpl.java | 38 +++++++++++++ .../repository/impl/NodeRepositoryImpl.java | 38 ------------- .../repository/impl/RoomRepositoryImpl.java | 28 ++++----- .../repository/impl/UserRepositoryImpl.java | 8 +-- .../impl/collection/DynamicSortedMap.java | 2 +- .../impl/collection/QueuedLinkedList.java | 2 +- ...eContainer.java => InstanceContainer.java} | 14 ++--- .../impl/container/RoomContainer.java | 6 +- .../impl/picker/LeastPickedPicker.java | 6 +- .../impl/picker/RoundRobinPicker.java | 6 +- .../impl/picker/SequentialFillingPicker.java | 6 +- .../picker/service/InstanceService.java | 22 +++++++ .../picker/service/NodeService.java | 22 ------- .../picker/service/RoomService.java | 8 +-- .../service/impl/InstanceServiceImpl.java | 49 ++++++++++++++++ .../picker/service/impl/NodeServiceImpl.java | 49 ---------------- .../picker/service/impl/RoomServiceImpl.java | 28 ++++----- .../storage/InstanceAndRoomStorage.java | 17 ++++++ .../picker/storage/NodeAndRoomStorage.java | 17 ------ .../picker/storage/impl/FileStorageImpl.java | 40 ++++++------- .../picker/storage/impl/NullStorageImpl.java | 10 ++-- .../picker/util/NamingValidator.java | 6 +- .../main/resources/graphql/schema.graphqls | 10 ++-- .../picker/config/FillingNodesConfig.java | 46 +++++++-------- .../picker/picker/LeastPickedTests.java | 10 ++-- .../picker/picker/RoundRobinTests.java | 8 +-- .../picker/picker/SequentialFillingTests.java | 10 ++-- .../picker/service/InstanceServiceTests.java | 57 +++++++++++++++++++ .../picker/service/NodeServiceTests.java | 57 ------------------- .../picker/service/RoomServiceTests.java | 44 +++++++------- 58 files changed, 482 insertions(+), 482 deletions(-) rename client-api/src/main/java/ru/dragonestia/picker/api/exception/{InvalidNodeIdentifierException.java => InvalidInstanceIdentifierException.java} (77%) rename server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/{EntityNode.java => EntityInstance.java} (70%) rename server/src/main/java/ru/dragonestia/picker/model/{node/Node.java => instance/Instance.java} (83%) create mode 100644 server/src/main/java/ru/dragonestia/picker/repository/InstanceRepository.java delete mode 100644 server/src/main/java/ru/dragonestia/picker/repository/NodeRepository.java create mode 100644 server/src/main/java/ru/dragonestia/picker/repository/impl/InstanceRepositoryImpl.java delete mode 100644 server/src/main/java/ru/dragonestia/picker/repository/impl/NodeRepositoryImpl.java rename server/src/main/java/ru/dragonestia/picker/repository/impl/container/{NodeContainer.java => InstanceContainer.java} (88%) create mode 100644 server/src/main/java/ru/dragonestia/picker/service/InstanceService.java delete mode 100644 server/src/main/java/ru/dragonestia/picker/service/NodeService.java create mode 100644 server/src/main/java/ru/dragonestia/picker/service/impl/InstanceServiceImpl.java delete mode 100644 server/src/main/java/ru/dragonestia/picker/service/impl/NodeServiceImpl.java create mode 100644 server/src/main/java/ru/dragonestia/picker/storage/InstanceAndRoomStorage.java delete mode 100644 server/src/main/java/ru/dragonestia/picker/storage/NodeAndRoomStorage.java create mode 100644 server/src/test/java/ru/dragonestia/picker/service/InstanceServiceTests.java delete mode 100644 server/src/test/java/ru/dragonestia/picker/service/NodeServiceTests.java diff --git a/README.md b/README.md index ddfbb91..631796d 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,8 @@ class Example { "qwerty123" ); - // Creating node - var nodeId = NodeIdentifier.of("test-node"); + // Creating instance + var nodeId = NodeIdentifier.of("test-instance"); var nodeDefinition = new NodeDefinition(nodeId) .setPickingMethod(PickingMethod.LEAST_PICKED); client.getNodeRepository().saveNode(nodeDefinition); diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/exception/ExceptionFactory.java b/client-api/src/main/java/ru/dragonestia/picker/api/exception/ExceptionFactory.java index ec0c0d9..1086050 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/exception/ExceptionFactory.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/exception/ExceptionFactory.java @@ -15,7 +15,7 @@ public class ExceptionFactory { private static Map init() { var factory = new HashMap(); - factory.put(InvalidNodeIdentifierException.ERROR_ID, InvalidNodeIdentifierException::new); + factory.put(InvalidInstanceIdentifierException.ERROR_ID, InvalidInstanceIdentifierException::new); factory.put(InvalidRoomIdentifierException.ERROR_ID, InvalidRoomIdentifierException::new); factory.put(InvalidUsernamesException.ERROR_ID, InvalidUsernamesException::new); factory.put(NodeAlreadyExistException.ERROR_ID, NodeAlreadyExistException::new); diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/exception/InvalidNodeIdentifierException.java b/client-api/src/main/java/ru/dragonestia/picker/api/exception/InvalidInstanceIdentifierException.java similarity index 77% rename from client-api/src/main/java/ru/dragonestia/picker/api/exception/InvalidNodeIdentifierException.java rename to client-api/src/main/java/ru/dragonestia/picker/api/exception/InvalidInstanceIdentifierException.java index 149478e..0ef9b29 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/exception/InvalidNodeIdentifierException.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/exception/InvalidInstanceIdentifierException.java @@ -4,17 +4,17 @@ import ru.dragonestia.picker.api.repository.response.ErrorResponse; import java.util.Map; -public final class InvalidNodeIdentifierException extends ApiException { +public final class InvalidInstanceIdentifierException extends ApiException { public static final String ERROR_ID = "err.node.invalid_identifier"; private final String nodeId; - public InvalidNodeIdentifierException(String nodeId) { + public InvalidInstanceIdentifierException(String nodeId) { this.nodeId = nodeId; } - public InvalidNodeIdentifierException(ErrorResponse errorResponse) { + public InvalidInstanceIdentifierException(ErrorResponse errorResponse) { this(errorResponse.details().get("identifier")); } diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/IRoom.java b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/IRoom.java index cf9e36d..dcf5628 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/IRoom.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/IRoom.java @@ -19,15 +19,15 @@ public interface IRoom { return RoomIdentifier.of(getIdentifier()); } - @NotNull String getNodeIdentifier(); + @NotNull String getInstanceIdentifier(); @Transient default @NotNull NodeIdentifier getNodeIdentifierObject() { - return NodeIdentifier.of(getNodeIdentifier()); + return NodeIdentifier.of(getInstanceIdentifier()); } default @NotNull RoomPath getPath() { - return new RoomPath(NodeIdentifier.of(getNodeIdentifier()), RoomIdentifier.of(getIdentifier())); + return new RoomPath(NodeIdentifier.of(getInstanceIdentifier()), RoomIdentifier.of(getIdentifier())); } int getMaxSlots(); diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ResponseRoom.java b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ResponseRoom.java index 0f47ffc..ed39664 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ResponseRoom.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ResponseRoom.java @@ -19,7 +19,7 @@ public class ResponseRoom implements IRoom { private String id; @Schema(description = "Node identifier", example = "test-node") - private String nodeId; + private String instanceId; @Schema(description = "Slots for users. -1 - unlimited slots", example = "25") private int slots; @@ -36,9 +36,9 @@ public class ResponseRoom implements IRoom { @Internal public ResponseRoom() {} - public ResponseRoom(@NotNull String id, @NotNull String nodeId, int slots, boolean locked, @NotNull String payload) { + public ResponseRoom(@NotNull String id, @NotNull String instanceId, int slots, boolean locked, @NotNull String payload) { this.id = id; - this.nodeId = nodeId; + this.instanceId = instanceId; this.slots = slots; this.locked = locked; this.payload = payload; @@ -51,8 +51,8 @@ public class ResponseRoom implements IRoom { } @Override - public @NotNull String getNodeIdentifier() { - return nodeId; + public @NotNull String getInstanceIdentifier() { + return instanceId; } @Transient @@ -117,7 +117,7 @@ public class ResponseRoom implements IRoom { @Override public int hashCode() { - return Objects.hash(id, nodeId); + return Objects.hash(id, instanceId); } @Override @@ -125,13 +125,13 @@ public class ResponseRoom implements IRoom { if (object == this) return true; if (object == null) return false; if (object instanceof ResponseRoom other) { - return id.equals(other.id) && nodeId.equals(other.nodeId); + return id.equals(other.id) && instanceId.equals(other.instanceId); } return false; } @Override public String toString() { - return "[ResponseRoom id='%s' nodeId='%s' slots=%s payload.len=%s]".formatted(id, nodeId, slots, payload.length()); + return "[ResponseRoom id='%s' nodeId='%s' slots=%s payload.len=%s]".formatted(id, instanceId, slots, payload.length()); } } diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/RoomDefinition.java b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/RoomDefinition.java index 79b3962..3d7344e 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/RoomDefinition.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/RoomDefinition.java @@ -28,7 +28,7 @@ public class RoomDefinition implements IRoom { } @Override - public @NotNull String getNodeIdentifier() { + public @NotNull String getInstanceIdentifier() { return nodeId; } diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ShortResponseRoom.java b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ShortResponseRoom.java index 2dffe37..d58593e 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ShortResponseRoom.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/model/room/ShortResponseRoom.java @@ -18,7 +18,7 @@ public class ShortResponseRoom implements IRoom { private String id; @Schema(description = "Node identifier", example = "test-node") - private String nodeId; + private String instanceId; @Schema(description = "Slots for users. -1 - unlimited slots", example = "25") private int slots; @@ -32,9 +32,9 @@ public class ShortResponseRoom implements IRoom { @Internal public ShortResponseRoom() {} - public ShortResponseRoom(String id, String nodeId, int slots, boolean locked) { + public ShortResponseRoom(String id, String instanceId, int slots, boolean locked) { this.id = id; - this.nodeId = nodeId; + this.instanceId = instanceId; this.slots = slots; this.locked = locked; this.details = new HashMap<>(); @@ -46,8 +46,8 @@ public class ShortResponseRoom implements IRoom { } @Override - public @NotNull String getNodeIdentifier() { - return nodeId; + public @NotNull String getInstanceIdentifier() { + return instanceId; } @Transient @@ -93,7 +93,7 @@ public class ShortResponseRoom implements IRoom { @Override public int hashCode() { - return Objects.hash(id, nodeId); + return Objects.hash(id, instanceId); } @Override @@ -101,13 +101,13 @@ public class ShortResponseRoom implements IRoom { if (object == this) return true; if (object == null) return false; if (object instanceof ShortResponseRoom other) { - return id.equals(other.id) && nodeId.equals(other.nodeId); + return id.equals(other.id) && instanceId.equals(other.instanceId); } return false; } @Override public String toString() { - return "[ShortResponseRoom id='%s' nodeId='%s' slots=%s]".formatted(id, nodeId, slots); + return "[ShortResponseRoom id='%s' nodeId='%s' slots=%s]".formatted(id, instanceId, slots); } } diff --git a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/RoomRepositoryImpl.java b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/RoomRepositoryImpl.java index c40a557..db998ab 100644 --- a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/RoomRepositoryImpl.java +++ b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/RoomRepositoryImpl.java @@ -33,7 +33,7 @@ public class RoomRepositoryImpl implements RoomRepository { @Override public void saveRoom(@NotNull RoomDefinition definition) { - rest.query("/nodes/" + definition.getNodeIdentifier() + "/rooms", HttpMethod.POST, params -> { + rest.query("/nodes/" + definition.getInstanceIdentifier() + "/rooms", HttpMethod.POST, params -> { params.put("roomId", definition.getIdentifier()); params.put("slots", Integer.toString(definition.getMaxSlots())); params.put("payload", definition.getPayload()); @@ -54,7 +54,7 @@ public class RoomRepositoryImpl implements RoomRepository { @Override public void removeRoom(@NotNull IRoom room) { rest.query( - "/nodes/%s/rooms/%s".formatted(room.getNodeIdentifier(), room.getIdentifier()), + "/nodes/%s/rooms/%s".formatted(room.getInstanceIdentifier(), room.getIdentifier()), HttpMethod.DELETE, params -> {} ); diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java index d91b978..0fd4bc8 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/RoomDetailsPage.java @@ -75,7 +75,7 @@ public class RoomDetailsPage extends VerticalLayout implements BeforeEnterObserv private void updateRoomInfo() { roomInfo.removeAll(); - roomInfo.add(new Html("Node identifier: " + room.getNodeIdentifier() + "")); + roomInfo.add(new Html("Node identifier: " + room.getInstanceIdentifier() + "")); roomInfo.add(new Html("Room identifier: " + room.getIdentifier() + "")); roomInfo.add(new Html("Slots: " + (room.hasUnlimitedSlots()? "Unlimited" : room.getMaxSlots()) + "")); roomInfo.add(new Html("Locked: " + (room.isLocked()? "Yes" : "No") + "")); diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/UserDetailsPage.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/UserDetailsPage.java index 85552f2..785eb4e 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/UserDetailsPage.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/UserDetailsPage.java @@ -64,7 +64,7 @@ public class UserDetailsPage extends VerticalLayout implements BeforeEnterObserv grid.addColumn(ShortResponseRoom::getIdentifier).setHeader("Room identifier").setSortable(true); - grid.addColumn(ShortResponseRoom::getNodeIdentifier).setHeader("Node identifier").setSortable(true); + grid.addColumn(ShortResponseRoom::getInstanceIdentifier).setHeader("Node identifier").setSortable(true); grid.addColumn(room -> room.getDetail(RoomDetails.COUNT_USERS)).setHeader("Users") .setComparator((room1, room2) -> { @@ -78,7 +78,7 @@ public class UserDetailsPage extends VerticalLayout implements BeforeEnterObserv var button = new Button("Details"); button.addThemeVariants(ButtonVariant.LUMO_PRIMARY); button.addClickListener(event -> { - getUI().ifPresent(ui -> ui.navigate("/nodes/%s/rooms/%s".formatted(room.getNodeIdentifier(), room.getIdentifier()))); + getUI().ifPresent(ui -> ui.navigate("/nodes/%s/rooms/%s".formatted(room.getInstanceIdentifier(), room.getIdentifier()))); }); return button; }).setTextAlign(ColumnTextAlign.END).setFrozenToEnd(true).setHeader(createRefreshButton()); diff --git a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/InvalidNodeIdentifierPlug.java b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/InvalidNodeIdentifierPlug.java index c054392..01019bd 100644 --- a/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/InvalidNodeIdentifierPlug.java +++ b/control-panel/src/main/java/ru/dragonestia/picker/cp/page/plug/InvalidNodeIdentifierPlug.java @@ -4,13 +4,13 @@ import com.vaadin.flow.router.BeforeEnterEvent; import com.vaadin.flow.router.ErrorParameter; import com.vaadin.flow.router.HasErrorParameter; import jakarta.servlet.http.HttpServletResponse; -import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException; +import ru.dragonestia.picker.api.exception.InvalidInstanceIdentifierException; import ru.dragonestia.picker.cp.component.NavPath; -public class InvalidNodeIdentifierPlug extends ErrorPlug implements HasErrorParameter { +public class InvalidNodeIdentifierPlug extends ErrorPlug implements HasErrorParameter { @Override - public int setErrorParameter(BeforeEnterEvent beforeEnterEvent, ErrorParameter errorParameter) { + public int setErrorParameter(BeforeEnterEvent beforeEnterEvent, ErrorParameter errorParameter) { var ex = errorParameter.getException(); var nodeId = ex.getNodeId(); diff --git a/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java b/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java index 9710882..ac00059 100644 --- a/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java +++ b/server/src/main/java/ru/dragonestia/picker/aspect/UserMetricsAspect.java @@ -11,7 +11,7 @@ import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; import ru.dragonestia.picker.repository.RoomRepository; import ru.dragonestia.picker.repository.UserRepository; @@ -55,9 +55,9 @@ public class UserMetricsAspect { totalUsers.set(userRepository.countAllUsers()); } - @After(value = "execution(void ru.dragonestia.picker.repository.NodeRepository.create(ru.dragonestia.picker.model.node.Node)) && args(node)", argNames = "node") - void onCreateNode(Node node) { - var nodeId = node.getIdentifier(); + @After(value = "execution(void ru.dragonestia.picker.repository.InstanceRepository.create(ru.dragonestia.picker.model.instance.Instance)) && args(instance)", argNames = "instance") + void onCreateNode(Instance instance) { + var nodeId = instance.getIdentifier(); var gauge = Gauge.builder("roompicker_node_users_total", () -> data.get(nodeId).users()) .tag("nodeId", nodeId) .register(meterRegistry); @@ -71,16 +71,16 @@ public class UserMetricsAspect { .tag("nodeId", nodeId) .register(meterRegistry); - var roomsGauge = Gauge.builder("roompicker_rooms", () -> roomRepository.all(node).size()) + var roomsGauge = Gauge.builder("roompicker_rooms", () -> roomRepository.all(instance).size()) .tag("nodeId", nodeId) .register(meterRegistry); data.put(nodeId, new NodeData(gauge, new AtomicInteger(0), counter, new AtomicInteger(0), lockedGauge, roomsGauge)); } - @After(value = "execution(* ru.dragonestia.picker.repository.NodeRepository.delete(ru.dragonestia.picker.model.node.Node)) && args(node)", argNames = "node") - void onDeleteNode(Node node) { - var data = this.data.remove(node.getIdentifier()); + @After(value = "execution(* ru.dragonestia.picker.repository.InstanceRepository.delete(ru.dragonestia.picker.model.instance.Instance)) && args(instance)", argNames = "instance") + void onDeleteNode(Instance instance) { + var data = this.data.remove(instance.getIdentifier()); meterRegistry.remove(data.usersGauge()); meterRegistry.remove(data.picksPerMinute()); @@ -88,9 +88,9 @@ public class UserMetricsAspect { meterRegistry.remove(data.roomsGauge()); } - @AfterReturning(value = "execution(* ru.dragonestia.picker.repository.RoomRepository.pick(ru.dragonestia.picker.model.node.Node, *)) && args(node, ..)", argNames = "node") - void onPickRoom(Node node) { - data.get(node.getIdentifier()).picksPerMinute().increment(); + @AfterReturning(value = "execution(* ru.dragonestia.picker.repository.RoomRepository.pick(ru.dragonestia.picker.model.instance.Instance, *)) && args(instance, ..)", argNames = "instance") + void onPickRoom(Instance instance) { + data.get(instance.getIdentifier()).picksPerMinute().increment(); } @Scheduled(fixedDelay = 3_000) @@ -100,7 +100,7 @@ public class UserMetricsAspect { }); containerRepository.all().forEach(nodeContainer -> { - var locked = data.get(nodeContainer.getNode().getIdentifier()).locked(); + var locked = data.get(nodeContainer.getInstance().getIdentifier()).locked(); locked.set(0); nodeContainer.allRooms().forEach(roomContainer -> { diff --git a/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java b/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java index 64e8085..8aba9c8 100644 --- a/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java +++ b/server/src/main/java/ru/dragonestia/picker/config/TestConfig.java @@ -16,11 +16,11 @@ import ru.dragonestia.picker.api.repository.type.NodeIdentifier; import ru.dragonestia.picker.api.repository.type.RoomIdentifier; import ru.dragonestia.picker.api.repository.type.UserIdentifier; import ru.dragonestia.picker.interceptor.DebugInterceptor; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.user.User; import ru.dragonestia.picker.model.factory.RoomFactory; import ru.dragonestia.picker.repository.RoomRepository; -import ru.dragonestia.picker.repository.NodeRepository; +import ru.dragonestia.picker.repository.InstanceRepository; import ru.dragonestia.picker.repository.UserRepository; import java.util.List; @@ -32,7 +32,7 @@ import java.util.UUID; @RequiredArgsConstructor public class TestConfig implements WebMvcConfigurer { - private final NodeRepository nodeRepository; + private final InstanceRepository instanceRepository; private final RoomRepository roomRepository; private final UserRepository userRepository; private final RoomFactory roomFactory; @@ -45,20 +45,20 @@ public class TestConfig implements WebMvcConfigurer { } @Bean - void createNodes() { - createNodeWithContent(new Node(NodeIdentifier.of("game-servers"), PickingMethod.ROUND_ROBIN, false)); - createNodeWithContent(new Node(NodeIdentifier.of("game-lobbies"), PickingMethod.LEAST_PICKED, false)); - createNodeWithContent(new Node(NodeIdentifier.of("hub"), PickingMethod.SEQUENTIAL_FILLING, false)); + void createInstances() { + createInstanceWithContent(new Instance(NodeIdentifier.of("game-servers"), PickingMethod.ROUND_ROBIN, false)); + createInstanceWithContent(new Instance(NodeIdentifier.of("game-lobbies"), PickingMethod.LEAST_PICKED, false)); + createInstanceWithContent(new Instance(NodeIdentifier.of("hub"), PickingMethod.SEQUENTIAL_FILLING, false)); } @SneakyThrows - private void createNodeWithContent(Node node) { - nodeRepository.create(node); + private void createInstanceWithContent(Instance instance) { + instanceRepository.create(instance); var json = new ObjectMapper().writer().withDefaultPrettyPrinter(); for (int i = 1; i <= 5; i++) { var slots = 5 * i; - var room = roomFactory.create(RoomIdentifier.of("test-" + i), node, slots, json.writeValueAsString(generatePayload()), false); + var room = roomFactory.create(RoomIdentifier.of("test-" + i), instance, slots, json.writeValueAsString(generatePayload()), false); roomRepository.create(room); for (int j = 0, n = rand.nextInt(slots + 1); j < n; j++) { @@ -68,7 +68,7 @@ public class TestConfig implements WebMvcConfigurer { } for (int i = 0; i < 5; i++) { - var room = roomFactory.create(RoomIdentifier.of(randomUUID().toString()), node, IRoom.UNLIMITED_SLOTS, json.writeValueAsString(generatePayload()), false); + var room = roomFactory.create(RoomIdentifier.of(randomUUID().toString()), instance, IRoom.UNLIMITED_SLOTS, json.writeValueAsString(generatePayload()), false); room.setLocked((i & 1) == 0); roomRepository.create(room); } diff --git a/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java b/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java index a59b3a7..9e2e013 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/ExceptionHandlerController.java @@ -26,8 +26,8 @@ public class ExceptionHandlerController { return create(400, ex); } - @ExceptionHandler(InvalidNodeIdentifierException.class) - ResponseEntity invalidNodeIdentifier(InvalidNodeIdentifierException ex) { + @ExceptionHandler(InvalidInstanceIdentifierException.class) + ResponseEntity invalidNodeIdentifier(InvalidInstanceIdentifierException ex) { return create(400, ex); } diff --git a/server/src/main/java/ru/dragonestia/picker/controller/NodeController.java b/server/src/main/java/ru/dragonestia/picker/controller/NodeController.java index 1104cc2..257c36a 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/NodeController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/NodeController.java @@ -11,7 +11,7 @@ import ru.dragonestia.picker.api.repository.response.NodeDetailsResponse; import ru.dragonestia.picker.api.repository.response.NodeListResponse; import ru.dragonestia.picker.api.repository.response.PickedRoomResponse; -@Tag(name = "Nodes", description = "Node management") +@Tag(name = "Nodes", description = "Instance management") @RestController @RequestMapping("/nodes") @RequiredArgsConstructor @@ -26,7 +26,7 @@ public class NodeController { @Operation(summary = "Register new node") @PostMapping ResponseEntity registerNode( - @Parameter(description = "Node identifier") @RequestParam(name = "nodeId") String nodeId, + @Parameter(description = "Instance identifier") @RequestParam(name = "nodeId") String nodeId, @Parameter(description = "Picking method method") @RequestParam(name = "method") PickingMethod method, @Parameter(description = "Save node") @RequestParam(name = "persist", required = false, defaultValue = "false") boolean persist ) { @@ -36,7 +36,7 @@ public class NodeController { @Operation(summary = "Get node details") @GetMapping("/{nodeId}") ResponseEntity nodeDetails( - @Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId + @Parameter(description = "Instance identifier") @PathVariable("nodeId") String nodeId ) { throw new UnsupportedOperationException("Not implemented"); } @@ -44,7 +44,7 @@ public class NodeController { @Operation(summary = "Unregister node") @DeleteMapping("/{nodeId}") ResponseEntity removeNode( - @Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId + @Parameter(description = "Instance identifier") @PathVariable("nodeId") String nodeId ) { throw new UnsupportedOperationException("Not implemented"); } @@ -52,7 +52,7 @@ public class NodeController { @Operation(summary = "Pick node for users") @PostMapping("/{nodeId}/pick") ResponseEntity pickRoom( - @Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable("nodeId") String nodeId, @RequestBody String userIds ) { throw new UnsupportedOperationException("Not implemented"); diff --git a/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java b/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java index 23df19a..6b4db0b 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/RoomController.java @@ -19,7 +19,7 @@ public class RoomController { @Operation(summary = "Get all rooms from node") @GetMapping ResponseEntity all( - @Parameter(description = "Node identifier") @PathVariable(name = "nodeId") String nodeId + @Parameter(description = "Instance identifier") @PathVariable(name = "nodeId") String nodeId ) { throw new UnsupportedOperationException("Not implemented"); } @@ -27,7 +27,7 @@ public class RoomController { @Operation(summary = "Register new room") @PostMapping ResponseEntity register( - @Parameter(description = "Node identifier") @PathVariable(name = "nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable(name = "nodeId") String nodeId, @Parameter(description = "Room identifier") @RequestParam(name = "roomId") String roomId, @Parameter(description = "Maximum users count in room") @RequestParam(name = "slots") int slots, @Parameter(description = "Payload. Some data") @RequestParam(name = "payload") String payload, @@ -40,7 +40,7 @@ public class RoomController { @Operation(summary = "Unregister room") @DeleteMapping("/{roomId}") ResponseEntity remove( - @Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable("nodeId") String nodeId, @Parameter(description = "Room identifier") @PathVariable("roomId") String roomId ) { throw new UnsupportedOperationException("Not implemented"); @@ -49,7 +49,7 @@ public class RoomController { @Operation(summary = "Get room details") @GetMapping("/{roomId}") ResponseEntity info( - @Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable("nodeId") String nodeId, @Parameter(description = "Room identifier") @PathVariable("roomId") String roomId ) { throw new UnsupportedOperationException("Not implemented"); @@ -59,7 +59,7 @@ public class RoomController { @ApiResponse(description = "New lock state") @PutMapping("/{roomId}/lock") ResponseEntity lockRoom( - @Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable("nodeId") String nodeId, @Parameter(description = "Room identifier") @PathVariable("roomId") String roomId, @Parameter(description = "New state for Lock property") @RequestParam(name = "newState") boolean value ) { diff --git a/server/src/main/java/ru/dragonestia/picker/controller/UserRoomController.java b/server/src/main/java/ru/dragonestia/picker/controller/UserRoomController.java index 78f86be..a96131b 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/UserRoomController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/UserRoomController.java @@ -18,7 +18,7 @@ public class UserRoomController { @Operation(summary = "Get users inside room") @GetMapping ResponseEntity usersInsideRoom( - @Parameter(description = "Node identifier") @PathVariable(name = "nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable(name = "nodeId") String nodeId, @Parameter(description = "Room identifier") @PathVariable(name = "roomId") String roomId, @Parameter(description = "Required addition user data", example = "COUNT_ROOMS") @RequestParam(name = "requiredDetails", required = false, defaultValue = "") String detailsSeq ) { @@ -28,7 +28,7 @@ public class UserRoomController { @Operation(summary = "Link users with room") @PostMapping ResponseEntity linkUserWithRoom( - @Parameter(description = "Node identifier") @PathVariable(name = "nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable(name = "nodeId") String nodeId, @Parameter(description = "Room identifier") @PathVariable(name = "roomId") String roomId, @Parameter(description = "User identifiers", example = "user1,user2,user3") @RequestParam(name = "userIds") String userIds, @Parameter(description = "Ignore slot limitation") @RequestParam(name = "force") boolean force @@ -39,7 +39,7 @@ public class UserRoomController { @Operation(summary = "Unlink users from room") @DeleteMapping ResponseEntity unlinkUsersForBucket( - @Parameter(description = "Node identifier") @PathVariable(name = "nodeId") String nodeId, + @Parameter(description = "Instance identifier") @PathVariable(name = "nodeId") String nodeId, @Parameter(description = "Room identifier") @PathVariable(name = "roomId") String roomId, @Parameter(description = "User identifiers", example = "user1,user2,user3") @RequestParam(name = "userIds") String userIds ) { 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 index c07c44c..bcd7b1a 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/graphql/GraphqlController.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/graphql/GraphqlController.java @@ -5,12 +5,12 @@ import org.springframework.graphql.data.method.annotation.Argument; import org.springframework.graphql.data.method.annotation.QueryMapping; import org.springframework.stereotype.Controller; import ru.dragonestia.picker.api.repository.type.UserIdentifier; -import ru.dragonestia.picker.controller.graphql.entity.EntityNode; +import ru.dragonestia.picker.controller.graphql.entity.EntityInstance; import ru.dragonestia.picker.controller.graphql.entity.EntityRoom; import ru.dragonestia.picker.controller.graphql.entity.EntityUser; import ru.dragonestia.picker.controller.graphql.entity.type.DataProvider; import ru.dragonestia.picker.model.user.User; -import ru.dragonestia.picker.service.NodeService; +import ru.dragonestia.picker.service.InstanceService; import ru.dragonestia.picker.service.RoomService; import ru.dragonestia.picker.service.UserService; @@ -19,35 +19,35 @@ import java.util.List; @Controller public class GraphqlController { - private final NodeService nodeService; + private final InstanceService instanceService; private final RoomService roomService; private final UserService userService; private final DataProvider dataProvider; - public GraphqlController(NodeService nodeService, RoomService roomService, UserService userService) { - this.nodeService = nodeService; + public GraphqlController(InstanceService instanceService, RoomService roomService, UserService userService) { + this.instanceService = instanceService; this.roomService = roomService; this.userService = userService; - dataProvider = new DataProvider(nodeService, roomService, userService); + dataProvider = new DataProvider(instanceService, roomService, userService); } @QueryMapping - List allNodes() { - return nodeService.all().stream() - .map(node -> new EntityNode(node, dataProvider)) + List allInstances() { + return instanceService.all().stream() + .map(node -> new EntityInstance(node, dataProvider)) .toList(); } @QueryMapping - EntityNode nodeById(@Argument String id) { - return nodeService.find(id) - .map(node -> new EntityNode(node, dataProvider)) + EntityInstance instanceById(@Argument String id) { + return instanceService.find(id) + .map(node -> new EntityInstance(node, dataProvider)) .orElse(null); } @QueryMapping List allRooms(@NotNull String nodeId) { - var node = nodeService.find(nodeId).orElse(null); + var node = instanceService.find(nodeId).orElse(null); if (node == null) return null; return roomService.all(node).stream() @@ -57,7 +57,7 @@ public class GraphqlController { @QueryMapping EntityRoom roomById(@Argument String nodeId, @NotNull String roomId) { - var node = nodeService.find(nodeId).orElse(null); + var node = instanceService.find(nodeId).orElse(null); if (node == null) return null; return roomService.find(node, roomId) 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/EntityInstance.java similarity index 70% rename from server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityNode.java rename to server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityInstance.java index acbedea..100cd7d 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityNode.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/EntityInstance.java @@ -2,23 +2,23 @@ package ru.dragonestia.picker.controller.graphql.entity; import lombok.RequiredArgsConstructor; import ru.dragonestia.picker.controller.graphql.entity.type.DataProvider; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import java.util.List; @RequiredArgsConstructor -public class EntityNode { +public class EntityInstance { - private final Node node; + private final Instance instance; private final DataProvider dataProvider; private List cachedRooms = null; public String getId() { - return node.getIdentifier(); + return instance.getIdentifier(); } public String getMethod() { - return node.getPickingMethod().name(); + return instance.getPickingMethod().name(); } public List getRooms() { @@ -26,7 +26,7 @@ public class EntityNode { return cachedRooms; } - cachedRooms = dataProvider.roomService().all(node).stream() + cachedRooms = dataProvider.roomService().all(instance).stream() .map(room -> new EntityRoom(room, dataProvider)) .toList(); @@ -38,6 +38,6 @@ public class EntityNode { } public boolean isPersist() { - return node.isPersist(); + return instance.isPersist(); } } 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 index 9d4588b..933cdae 100644 --- 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 @@ -17,13 +17,13 @@ public class EntityRoom { return room.getIdentifier(); } - public String getNodeId() { - return room.getNodeIdentifier(); + public String getInstanceId() { + return room.getInstanceIdentifier(); } - public EntityNode getNode() { - return dataProvider.nodeService().find(room.getNodeIdentifier()) - .map(node -> new EntityNode(node, dataProvider)) + public EntityInstance getInstance() { + return dataProvider.instanceService().find(room.getInstanceIdentifier()) + .map(node -> new EntityInstance(node, dataProvider)) .orElseThrow(); } diff --git a/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/type/DataProvider.java b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/type/DataProvider.java index d8467dd..9629077 100644 --- a/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/type/DataProvider.java +++ b/server/src/main/java/ru/dragonestia/picker/controller/graphql/entity/type/DataProvider.java @@ -1,10 +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.InstanceService; import ru.dragonestia.picker.service.RoomService; import ru.dragonestia.picker.service.UserService; -public record DataProvider(@NotNull NodeService nodeService, +public record DataProvider(@NotNull InstanceService instanceService, @NotNull RoomService roomService, @NotNull UserService userService) {} diff --git a/server/src/main/java/ru/dragonestia/picker/model/factory/RoomFactory.java b/server/src/main/java/ru/dragonestia/picker/model/factory/RoomFactory.java index 9b29267..4dbe7ca 100644 --- a/server/src/main/java/ru/dragonestia/picker/model/factory/RoomFactory.java +++ b/server/src/main/java/ru/dragonestia/picker/model/factory/RoomFactory.java @@ -5,7 +5,7 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; import ru.dragonestia.picker.api.repository.type.RoomIdentifier; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; @Component @@ -13,7 +13,7 @@ import ru.dragonestia.picker.model.room.Room; public class RoomFactory { @Contract("_, _, _, _, _ -> new") - public @NotNull Room create(@NotNull RoomIdentifier identifier, @NotNull Node node, int slots, @NotNull String payload, boolean persist) { - return new Room(identifier, node, slots, payload, persist); + public @NotNull Room create(@NotNull RoomIdentifier identifier, @NotNull Instance instance, int slots, @NotNull String payload, boolean persist) { + return new Room(identifier, instance, slots, payload, persist); } } diff --git a/server/src/main/java/ru/dragonestia/picker/model/node/Node.java b/server/src/main/java/ru/dragonestia/picker/model/instance/Instance.java similarity index 83% rename from server/src/main/java/ru/dragonestia/picker/model/node/Node.java rename to server/src/main/java/ru/dragonestia/picker/model/instance/Instance.java index f4f009d..07f0d88 100644 --- a/server/src/main/java/ru/dragonestia/picker/model/node/Node.java +++ b/server/src/main/java/ru/dragonestia/picker/model/instance/Instance.java @@ -1,4 +1,4 @@ -package ru.dragonestia.picker.model.node; +package ru.dragonestia.picker.model.instance; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -8,13 +8,13 @@ import ru.dragonestia.picker.api.model.node.PickingMethod; import ru.dragonestia.picker.api.model.node.ResponseNode; import ru.dragonestia.picker.api.repository.type.NodeIdentifier; -public class Node implements INode { +public class Instance implements INode { private final String identifier; private final PickingMethod pickingMethod; private final boolean persist; - public Node(@NotNull NodeIdentifier identifier, @NotNull PickingMethod pickingMethod, boolean persist) { + public Instance(@NotNull NodeIdentifier identifier, @NotNull PickingMethod pickingMethod, boolean persist) { this.identifier = identifier.getValue(); this.pickingMethod = pickingMethod; this.persist = persist; @@ -53,7 +53,7 @@ public class Node implements INode { public boolean equals(Object object) { if (object == this) return true; if (object == null) return false; - if (object instanceof Node other) { + if (object instanceof Instance other) { return identifier.equals(other.identifier); } return false; @@ -61,6 +61,6 @@ public class Node implements INode { @Override public String toString() { - return "{Node id='%s'}".formatted(identifier); + return "{Instance id='%s'}".formatted(identifier); } } diff --git a/server/src/main/java/ru/dragonestia/picker/model/room/Room.java b/server/src/main/java/ru/dragonestia/picker/model/room/Room.java index 950c4b9..241cd55 100644 --- a/server/src/main/java/ru/dragonestia/picker/model/room/Room.java +++ b/server/src/main/java/ru/dragonestia/picker/model/room/Room.java @@ -7,22 +7,22 @@ import ru.dragonestia.picker.api.model.room.ResponseRoom; import ru.dragonestia.picker.api.model.room.RoomDetails; import ru.dragonestia.picker.api.model.room.ShortResponseRoom; import ru.dragonestia.picker.api.repository.type.RoomIdentifier; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import java.util.Objects; public class Room implements IRoom { private final String identifier; - private final String nodeIdentifier; + private final String instanceIdentifier; private final int slots; private final String payload; private final boolean persist; private boolean locked = false; - public Room(@NotNull RoomIdentifier identifier, @NotNull Node node, int slots, @NotNull String payload, boolean persist) { + public Room(@NotNull RoomIdentifier identifier, @NotNull Instance instance, int slots, @NotNull String payload, boolean persist) { this.identifier = identifier.getValue(); - this.nodeIdentifier = node.getIdentifier(); + this.instanceIdentifier = instance.getIdentifier(); this.slots = slots; this.payload = payload; this.persist = persist; @@ -34,8 +34,8 @@ public class Room implements IRoom { } @Override - public @NotNull String getNodeIdentifier() { - return nodeIdentifier; + public @NotNull String getInstanceIdentifier() { + return instanceIdentifier; } @Override @@ -74,16 +74,16 @@ public class Room implements IRoom { } public @NotNull ResponseRoom toResponseObject() { - return new ResponseRoom(identifier, nodeIdentifier, slots, locked, payload); + return new ResponseRoom(identifier, instanceIdentifier, slots, locked, payload); } public @NotNull ShortResponseRoom toShortResponseObject() { - return new ShortResponseRoom(identifier, nodeIdentifier, slots, locked); + return new ShortResponseRoom(identifier, instanceIdentifier, slots, locked); } @Override public int hashCode() { - return Objects.hash(identifier, nodeIdentifier); + return Objects.hash(identifier, instanceIdentifier); } @Override @@ -91,7 +91,7 @@ public class Room implements IRoom { if (object == this) return true; if (object == null) return false; if (object instanceof Room other) { - return identifier.equals(other.identifier) && nodeIdentifier.equals(other.nodeIdentifier); + return identifier.equals(other.identifier) && instanceIdentifier.equals(other.instanceIdentifier); } return false; } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/InstanceRepository.java b/server/src/main/java/ru/dragonestia/picker/repository/InstanceRepository.java new file mode 100644 index 0000000..0d363b0 --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/repository/InstanceRepository.java @@ -0,0 +1,18 @@ +package ru.dragonestia.picker.repository; + +import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; +import ru.dragonestia.picker.model.instance.Instance; + +import java.util.List; +import java.util.Optional; + +public interface InstanceRepository { + + void create(Instance instance) throws NodeAlreadyExistException; + + void delete(Instance instance); + + Optional findById(String nodeId); + + List all(); +} diff --git a/server/src/main/java/ru/dragonestia/picker/repository/NodeRepository.java b/server/src/main/java/ru/dragonestia/picker/repository/NodeRepository.java deleted file mode 100644 index 245afb8..0000000 --- a/server/src/main/java/ru/dragonestia/picker/repository/NodeRepository.java +++ /dev/null @@ -1,18 +0,0 @@ -package ru.dragonestia.picker.repository; - -import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; -import ru.dragonestia.picker.model.node.Node; - -import java.util.List; -import java.util.Optional; - -public interface NodeRepository { - - void create(Node node) throws NodeAlreadyExistException; - - void delete(Node node); - - Optional findById(String nodeId); - - List all(); -} diff --git a/server/src/main/java/ru/dragonestia/picker/repository/RoomRepository.java b/server/src/main/java/ru/dragonestia/picker/repository/RoomRepository.java index 353ca7f..9c69726 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/RoomRepository.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/RoomRepository.java @@ -2,8 +2,8 @@ package ru.dragonestia.picker.repository; import ru.dragonestia.picker.api.exception.NoRoomsAvailableException; import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; -import ru.dragonestia.picker.model.node.Node; import ru.dragonestia.picker.model.user.User; import java.util.Collection; @@ -16,9 +16,9 @@ public interface RoomRepository { void remove(Room room); - Optional find(Node node, String identifier); + Optional find(Instance instance, String identifier); - Collection all(Node node); + Collection all(Instance instance); - Room pick(Node node, Set users) throws NoRoomsAvailableException; + Room pick(Instance instance, Set users) throws NoRoomsAvailableException; } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/ContainerRepository.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/ContainerRepository.java index 325e556..0bc0d33 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/ContainerRepository.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/ContainerRepository.java @@ -3,8 +3,8 @@ package ru.dragonestia.picker.repository.impl; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Component; import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; -import ru.dragonestia.picker.model.node.Node; -import ru.dragonestia.picker.repository.impl.container.NodeContainer; +import ru.dragonestia.picker.model.instance.Instance; +import ru.dragonestia.picker.repository.impl.container.InstanceContainer; import ru.dragonestia.picker.repository.impl.type.UserTransaction; import java.util.Collection; @@ -15,28 +15,28 @@ import java.util.concurrent.ConcurrentHashMap; @Component public class ContainerRepository { - private final Map containers = new ConcurrentHashMap<>(); + private final Map containers = new ConcurrentHashMap<>(); private UserTransaction.Listener transactionListener = transaction -> {}; - public void create(Node node) throws NodeAlreadyExistException { - if (containers.containsKey(node.getIdentifier())) { - throw new NodeAlreadyExistException(node.getIdentifier()); + public void create(Instance instance) throws NodeAlreadyExistException { + if (containers.containsKey(instance.getIdentifier())) { + throw new NodeAlreadyExistException(instance.getIdentifier()); } - var container = new NodeContainer(node, transactionListener); - containers.put(node.getIdentifier(), container); + var container = new InstanceContainer(instance, transactionListener); + containers.put(instance.getIdentifier(), container); } public void remove(@NotNull String nodeId) { containers.remove(nodeId); } - public @NotNull Optional findById(@NotNull String nodeId) { + public @NotNull Optional findById(@NotNull String nodeId) { return Optional.ofNullable(containers.get(nodeId)); } - public @NotNull Collection all() { + public @NotNull Collection all() { return containers.values(); } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/InstanceRepositoryImpl.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/InstanceRepositoryImpl.java new file mode 100644 index 0000000..2f2baa5 --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/InstanceRepositoryImpl.java @@ -0,0 +1,38 @@ +package ru.dragonestia.picker.repository.impl; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; +import ru.dragonestia.picker.model.instance.Instance; +import ru.dragonestia.picker.repository.InstanceRepository; +import ru.dragonestia.picker.repository.impl.container.InstanceContainer; + +import java.util.List; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class InstanceRepositoryImpl implements InstanceRepository { + + private final ContainerRepository containerRepository; + + @Override + public void create(Instance instance) throws NodeAlreadyExistException { + containerRepository.create(instance); + } + + @Override + public void delete(Instance instance) { + containerRepository.remove(instance.getIdentifier()); + } + + @Override + public Optional findById(String nodeId) { + return containerRepository.findById(nodeId).map(InstanceContainer::getInstance); + } + + @Override + public List all() { + return containerRepository.all().stream().map(InstanceContainer::getInstance).toList(); + } +} diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/NodeRepositoryImpl.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/NodeRepositoryImpl.java deleted file mode 100644 index 4a2faea..0000000 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/NodeRepositoryImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.dragonestia.picker.repository.impl; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; -import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; -import ru.dragonestia.picker.model.node.Node; -import ru.dragonestia.picker.repository.NodeRepository; -import ru.dragonestia.picker.repository.impl.container.NodeContainer; - -import java.util.List; -import java.util.Optional; - -@Component -@RequiredArgsConstructor -public class NodeRepositoryImpl implements NodeRepository { - - private final ContainerRepository containerRepository; - - @Override - public void create(Node node) throws NodeAlreadyExistException { - containerRepository.create(node); - } - - @Override - public void delete(Node node) { - containerRepository.remove(node.getIdentifier()); - } - - @Override - public Optional findById(String nodeId) { - return containerRepository.findById(nodeId).map(NodeContainer::getNode); - } - - @Override - public List all() { - return containerRepository.all().stream().map(NodeContainer::getNode).toList(); - } -} diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java index b377f24..97aa883 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/RoomRepositoryImpl.java @@ -5,7 +5,7 @@ import org.springframework.stereotype.Component; import ru.dragonestia.picker.api.exception.NoRoomsAvailableException; import ru.dragonestia.picker.api.exception.NodeNotFoundException; import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; import ru.dragonestia.picker.model.user.User; import ru.dragonestia.picker.repository.RoomRepository; @@ -23,38 +23,38 @@ public class RoomRepositoryImpl implements RoomRepository { @Override public void create(Room room) throws RoomAlreadyExistException { - containerRepository.findById(room.getNodeIdentifier()) - .orElseThrow(() -> new NodeNotFoundException(room.getNodeIdentifier())) + containerRepository.findById(room.getInstanceIdentifier()) + .orElseThrow(() -> new NodeNotFoundException(room.getInstanceIdentifier())) .addRoom(room); } @Override public void remove(Room room) { - containerRepository.findById(room.getNodeIdentifier()) - .orElseThrow(() -> new NodeNotFoundException(room.getNodeIdentifier())) + containerRepository.findById(room.getInstanceIdentifier()) + .orElseThrow(() -> new NodeNotFoundException(room.getInstanceIdentifier())) .removeRoom(room); } @Override - public Optional find(Node node, String identifier) { - return containerRepository.findById(node.getIdentifier()) - .orElseThrow(() -> new NodeNotFoundException(node.getIdentifier())) + public Optional find(Instance instance, String identifier) { + return containerRepository.findById(instance.getIdentifier()) + .orElseThrow(() -> new NodeNotFoundException(instance.getIdentifier())) .findRoomById(identifier) .map(RoomContainer::getRoom); } @Override - public Collection all(Node node) { - return containerRepository.findById(node.getIdentifier()) - .orElseThrow(() -> new NodeNotFoundException(node.getIdentifier())) + public Collection all(Instance instance) { + return containerRepository.findById(instance.getIdentifier()) + .orElseThrow(() -> new NodeNotFoundException(instance.getIdentifier())) .allRooms() .stream().map(RoomContainer::getRoom).toList(); } @Override - public Room pick(Node node, Set users) throws NoRoomsAvailableException { - return containerRepository.findById(node.getIdentifier()) - .orElseThrow(() -> new NodeNotFoundException(node.getIdentifier())) + public Room pick(Instance instance, Set users) throws NoRoomsAvailableException { + return containerRepository.findById(instance.getIdentifier()) + .orElseThrow(() -> new NodeNotFoundException(instance.getIdentifier())) .pick(users); } } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java index c1fad86..c32f091 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/UserRepositoryImpl.java @@ -86,7 +86,7 @@ public class UserRepositoryImpl implements UserRepository { var result = new HashMap(); containerRepository.all().forEach(nodeContainer -> { - var nodeId = nodeContainer.getNode().getIdentifier(); + var nodeId = nodeContainer.getInstance().getIdentifier(); nodeContainer.allRooms().forEach(roomContainer -> { result.put(nodeId, result.getOrDefault(nodeId, 0) + roomContainer.countUsers()); @@ -97,9 +97,9 @@ public class UserRepositoryImpl implements UserRepository { } private RoomContainer getRoomContainer(Room room) { - return containerRepository.findById(room.getNodeIdentifier()) - .orElseThrow(() -> new NodeNotFoundException(room.getNodeIdentifier())) + return containerRepository.findById(room.getInstanceIdentifier()) + .orElseThrow(() -> new NodeNotFoundException(room.getInstanceIdentifier())) .findRoomById(room.getIdentifier()) - .orElseThrow(() -> new RoomNotFoundException(room.getNodeIdentifier(), room.getIdentifier())); + .orElseThrow(() -> new RoomNotFoundException(room.getInstanceIdentifier(), room.getIdentifier())); } } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/DynamicSortedMap.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/DynamicSortedMap.java index 50d656a..e82bc60 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/DynamicSortedMap.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/DynamicSortedMap.java @@ -141,7 +141,7 @@ public class DynamicSortedMap { @Override public String toString() { - return "{Node id=%s, score=%s, removed=%s }".formatted( + return "{Instance id=%s, score=%s, removed=%s }".formatted( object.getId(), getScore(), removed diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/QueuedLinkedList.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/QueuedLinkedList.java index bd842bd..ac3b683 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/QueuedLinkedList.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/collection/QueuedLinkedList.java @@ -126,7 +126,7 @@ public class QueuedLinkedList { @Override public String toString() { - return "{Node id=%s, prev=%s, next=%s, removed=%s }".formatted( + return "{Instance id=%s, prev=%s, next=%s, removed=%s }".formatted( object.getId(), prev == null? null : prev.object.getId(), next == null? null : next.object.getId(), diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/container/NodeContainer.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/container/InstanceContainer.java similarity index 88% rename from server/src/main/java/ru/dragonestia/picker/repository/impl/container/NodeContainer.java rename to server/src/main/java/ru/dragonestia/picker/repository/impl/container/InstanceContainer.java index 3e35d31..e0b9104 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/container/NodeContainer.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/container/InstanceContainer.java @@ -3,7 +3,7 @@ package ru.dragonestia.picker.repository.impl.container; import lombok.Getter; import org.jetbrains.annotations.NotNull; import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; import ru.dragonestia.picker.model.user.User; import ru.dragonestia.picker.repository.impl.picker.LeastPickedPicker; @@ -17,24 +17,24 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; -public class NodeContainer { +public class InstanceContainer { @Getter - private final Node node; + private final Instance instance; private final UserTransaction.Listener transactionListener; private final RoomPicker picker; private final ReadWriteLock roomLock = new ReentrantReadWriteLock(); private final Map rooms = new ConcurrentHashMap<>(); - public NodeContainer(@NotNull Node node, @NotNull UserTransaction.Listener transactionListener) { - this.node = node; + public InstanceContainer(@NotNull Instance instance, @NotNull UserTransaction.Listener transactionListener) { + this.instance = instance; this.transactionListener = transactionListener; this.picker = initPicker(); } private @NotNull RoomPicker initPicker() { - return switch (node.getPickingMethod()) { + return switch (instance.getPickingMethod()) { case SEQUENTIAL_FILLING -> new SequentialFillingPicker(this); case ROUND_ROBIN -> new RoundRobinPicker(this); case LEAST_PICKED -> new LeastPickedPicker(this); @@ -45,7 +45,7 @@ public class NodeContainer { roomLock.writeLock().lock(); try { if (rooms.containsKey(room.getIdentifier())) { - throw new RoomAlreadyExistException(node.getIdentifier(), room.getIdentifier()); + throw new RoomAlreadyExistException(instance.getIdentifier(), room.getIdentifier()); } var container = new RoomContainer(room, this); diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/container/RoomContainer.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/container/RoomContainer.java index cff5151..c624bd2 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/container/RoomContainer.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/container/RoomContainer.java @@ -15,12 +15,12 @@ public class RoomContainer { @Getter private final Room room; - private final NodeContainer container; + private final InstanceContainer container; private final ReadWriteLock usersLock = new ReentrantReadWriteLock(true); private final Set users = new HashSet<>(); - public RoomContainer(@NotNull Room room, @NotNull NodeContainer container) { + public RoomContainer(@NotNull Room room, @NotNull InstanceContainer container) { this.room = room; this.container = container; } @@ -32,7 +32,7 @@ public class RoomContainer { users.addAll(toAdd); noticePickersAboutUserNumberUpdate(); } else { - throw new RoomAreFullException(room.getNodeIdentifier(), room.getIdentifier()); + throw new RoomAreFullException(room.getInstanceIdentifier(), room.getIdentifier()); } } finally { usersLock.writeLock().unlock(); diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/LeastPickedPicker.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/LeastPickedPicker.java index a0de3f1..f7623ab 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/LeastPickedPicker.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/LeastPickedPicker.java @@ -6,7 +6,7 @@ import ru.dragonestia.picker.api.model.node.PickingMethod; import ru.dragonestia.picker.model.room.Room; import ru.dragonestia.picker.model.user.User; import ru.dragonestia.picker.repository.impl.collection.DynamicSortedMap; -import ru.dragonestia.picker.repository.impl.container.NodeContainer; +import ru.dragonestia.picker.repository.impl.container.InstanceContainer; import ru.dragonestia.picker.repository.impl.container.RoomContainer; import java.util.Collection; @@ -14,7 +14,7 @@ import java.util.Collection; @RequiredArgsConstructor public class LeastPickedPicker implements RoomPicker { - private final NodeContainer container; + private final InstanceContainer container; private final DynamicSortedMap map = new DynamicSortedMap<>(); @Override @@ -41,7 +41,7 @@ public class LeastPickedPicker implements RoomPicker { if (!wrapper.canAddUnits(users.size())) throw new RuntimeException(); } catch (RuntimeException ex) { - throw new NoRoomsAvailableException(container.getNode().getIdentifier()); + throw new NoRoomsAvailableException(container.getInstance().getIdentifier()); } } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/RoundRobinPicker.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/RoundRobinPicker.java index 4476fb9..8345d9e 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/RoundRobinPicker.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/RoundRobinPicker.java @@ -5,7 +5,7 @@ import ru.dragonestia.picker.api.exception.NoRoomsAvailableException; import ru.dragonestia.picker.api.model.node.PickingMethod; import ru.dragonestia.picker.model.user.User; import ru.dragonestia.picker.repository.impl.collection.QueuedLinkedList; -import ru.dragonestia.picker.repository.impl.container.NodeContainer; +import ru.dragonestia.picker.repository.impl.container.InstanceContainer; import ru.dragonestia.picker.repository.impl.container.RoomContainer; import java.util.Collection; @@ -14,7 +14,7 @@ import java.util.concurrent.atomic.AtomicInteger; @RequiredArgsConstructor public class RoundRobinPicker implements RoomPicker { - private final NodeContainer container; + private final InstanceContainer container; private final AtomicInteger addition = new AtomicInteger(0); private final QueuedLinkedList list = new QueuedLinkedList<>(wrapper -> wrapper.canAddUnits(addition.get())); @@ -42,7 +42,7 @@ public class RoundRobinPicker implements RoomPicker { addition.set(amount); wrapper = list.pick(); } catch (RuntimeException ex) { - throw new NoRoomsAvailableException(container.getNode().getIdentifier()); + throw new NoRoomsAvailableException(container.getInstance().getIdentifier()); } } diff --git a/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/SequentialFillingPicker.java b/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/SequentialFillingPicker.java index 33f57e2..8875b8d 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/SequentialFillingPicker.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/picker/SequentialFillingPicker.java @@ -4,7 +4,7 @@ import lombok.RequiredArgsConstructor; import ru.dragonestia.picker.api.exception.NoRoomsAvailableException; import ru.dragonestia.picker.api.model.node.PickingMethod; import ru.dragonestia.picker.model.user.User; -import ru.dragonestia.picker.repository.impl.container.NodeContainer; +import ru.dragonestia.picker.repository.impl.container.InstanceContainer; import ru.dragonestia.picker.repository.impl.container.RoomContainer; import java.util.Collection; @@ -14,7 +14,7 @@ import java.util.Map; @RequiredArgsConstructor public class SequentialFillingPicker implements RoomPicker { - private final NodeContainer container; + private final InstanceContainer container; private final Map wrappers = new LinkedHashMap<>(); @Override @@ -43,7 +43,7 @@ public class SequentialFillingPicker implements RoomPicker { } } - throw new NoRoomsAvailableException(container.getNode().getIdentifier()); + throw new NoRoomsAvailableException(container.getInstance().getIdentifier()); } @Override diff --git a/server/src/main/java/ru/dragonestia/picker/service/InstanceService.java b/server/src/main/java/ru/dragonestia/picker/service/InstanceService.java new file mode 100644 index 0000000..b6a5b4d --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/service/InstanceService.java @@ -0,0 +1,22 @@ +package ru.dragonestia.picker.service; + +import org.springframework.security.access.prepost.PreAuthorize; +import ru.dragonestia.picker.api.exception.InvalidInstanceIdentifierException; +import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; +import ru.dragonestia.picker.model.instance.Instance; + +import java.util.List; +import java.util.Optional; + +public interface InstanceService { + + @PreAuthorize("hasRole('NODE_MANAGEMENT')") + void create(Instance instance) throws InvalidInstanceIdentifierException, NodeAlreadyExistException; + + @PreAuthorize("hasRole('NODE_MANAGEMENT')") + void remove(Instance instance); + + List all(); + + Optional find(String nodeId); +} diff --git a/server/src/main/java/ru/dragonestia/picker/service/NodeService.java b/server/src/main/java/ru/dragonestia/picker/service/NodeService.java deleted file mode 100644 index ec83305..0000000 --- a/server/src/main/java/ru/dragonestia/picker/service/NodeService.java +++ /dev/null @@ -1,22 +0,0 @@ -package ru.dragonestia.picker.service; - -import org.springframework.security.access.prepost.PreAuthorize; -import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException; -import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; -import ru.dragonestia.picker.model.node.Node; - -import java.util.List; -import java.util.Optional; - -public interface NodeService { - - @PreAuthorize("hasRole('NODE_MANAGEMENT')") - void create(Node node) throws InvalidNodeIdentifierException, NodeAlreadyExistException; - - @PreAuthorize("hasRole('NODE_MANAGEMENT')") - void remove(Node node); - - List all(); - - Optional find(String nodeId); -} diff --git a/server/src/main/java/ru/dragonestia/picker/service/RoomService.java b/server/src/main/java/ru/dragonestia/picker/service/RoomService.java index d3c8cc4..faa7a4e 100644 --- a/server/src/main/java/ru/dragonestia/picker/service/RoomService.java +++ b/server/src/main/java/ru/dragonestia/picker/service/RoomService.java @@ -3,8 +3,8 @@ package ru.dragonestia.picker.service; import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException; import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; import ru.dragonestia.picker.api.repository.response.PickedRoomResponse; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; -import ru.dragonestia.picker.model.node.Node; import ru.dragonestia.picker.model.user.User; import java.util.Collection; @@ -17,11 +17,11 @@ public interface RoomService { void remove(Room room); - Optional find(Node node, String roomId); + Optional find(Instance instance, String roomId); - Collection all(Node node); + Collection all(Instance instance); - PickedRoomResponse pickAvailable(Node node, Set users); + PickedRoomResponse pickAvailable(Instance instance, Set users); void updateState(Room room); } diff --git a/server/src/main/java/ru/dragonestia/picker/service/impl/InstanceServiceImpl.java b/server/src/main/java/ru/dragonestia/picker/service/impl/InstanceServiceImpl.java new file mode 100644 index 0000000..c8eedd7 --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/service/impl/InstanceServiceImpl.java @@ -0,0 +1,49 @@ +package ru.dragonestia.picker.service.impl; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import ru.dragonestia.picker.api.exception.InvalidInstanceIdentifierException; +import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; +import ru.dragonestia.picker.model.instance.Instance; +import ru.dragonestia.picker.repository.InstanceRepository; +import ru.dragonestia.picker.repository.RoomRepository; +import ru.dragonestia.picker.service.InstanceService; +import ru.dragonestia.picker.storage.InstanceAndRoomStorage; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class InstanceServiceImpl implements InstanceService { + + private final InstanceRepository instanceRepository; + private final RoomRepository roomRepository; + private final InstanceAndRoomStorage storage; + + @Override + public void create(Instance instance) throws InvalidInstanceIdentifierException, NodeAlreadyExistException { + instanceRepository.create(instance); + storage.saveInstance(instance); + } + + @Override + public void remove(Instance instance) { + for (var room: roomRepository.all(instance)) { + storage.removeRoom(room); + } + + instanceRepository.delete(instance); + storage.removeInstance(instance); + } + + @Override + public List all() { + return instanceRepository.all(); + } + + @Override + public Optional find(String nodeId) { + return instanceRepository.findById(nodeId); + } +} diff --git a/server/src/main/java/ru/dragonestia/picker/service/impl/NodeServiceImpl.java b/server/src/main/java/ru/dragonestia/picker/service/impl/NodeServiceImpl.java deleted file mode 100644 index 473f903..0000000 --- a/server/src/main/java/ru/dragonestia/picker/service/impl/NodeServiceImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package ru.dragonestia.picker.service.impl; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException; -import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; -import ru.dragonestia.picker.model.node.Node; -import ru.dragonestia.picker.repository.NodeRepository; -import ru.dragonestia.picker.repository.RoomRepository; -import ru.dragonestia.picker.service.NodeService; -import ru.dragonestia.picker.storage.NodeAndRoomStorage; - -import java.util.List; -import java.util.Optional; - -@Service -@RequiredArgsConstructor -public class NodeServiceImpl implements NodeService { - - private final NodeRepository nodeRepository; - private final RoomRepository roomRepository; - private final NodeAndRoomStorage storage; - - @Override - public void create(Node node) throws InvalidNodeIdentifierException, NodeAlreadyExistException { - nodeRepository.create(node); - storage.saveNode(node); - } - - @Override - public void remove(Node node) { - for (var room: roomRepository.all(node)) { - storage.removeRoom(room); - } - - nodeRepository.delete(node); - storage.removeNode(node); - } - - @Override - public List all() { - return nodeRepository.all(); - } - - @Override - public Optional find(String nodeId) { - return nodeRepository.findById(nodeId); - } -} diff --git a/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java b/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java index 8622ba6..43f1eb0 100644 --- a/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/service/impl/RoomServiceImpl.java @@ -9,13 +9,13 @@ import ru.dragonestia.picker.api.exception.NotPersistedNodeException; import ru.dragonestia.picker.api.exception.RoomAlreadyExistException; import ru.dragonestia.picker.api.repository.response.PickedRoomResponse; import ru.dragonestia.picker.model.room.Room; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.user.User; -import ru.dragonestia.picker.repository.NodeRepository; +import ru.dragonestia.picker.repository.InstanceRepository; import ru.dragonestia.picker.repository.RoomRepository; import ru.dragonestia.picker.repository.UserRepository; import ru.dragonestia.picker.service.RoomService; -import ru.dragonestia.picker.storage.NodeAndRoomStorage; +import ru.dragonestia.picker.storage.InstanceAndRoomStorage; import ru.dragonestia.picker.util.NamingValidator; import java.util.*; @@ -27,16 +27,16 @@ import java.util.stream.Collectors; public class RoomServiceImpl implements RoomService { private final RoomRepository roomRepository; - private final NodeRepository nodeRepository; + private final InstanceRepository instanceRepository; private final UserRepository userRepository; private final NamingValidator namingValidator; - private final NodeAndRoomStorage storage; + private final InstanceAndRoomStorage storage; @Override public void create(Room room) throws InvalidRoomIdentifierException, RoomAlreadyExistException, NotPersistedNodeException { - namingValidator.validateRoomId(room.getNodeIdentifier(), room.getIdentifier()); + namingValidator.validateRoomId(room.getInstanceIdentifier(), room.getIdentifier()); - var node = nodeRepository.findById(room.getNodeIdentifier()).orElseThrow(() -> new NodeNotFoundException(room.getNodeIdentifier())); + var node = instanceRepository.findById(room.getInstanceIdentifier()).orElseThrow(() -> new NodeNotFoundException(room.getInstanceIdentifier())); if (!node.isPersist() && room.isPersist()) { throw new NotPersistedNodeException(node.getIdentifier(), room.getIdentifier()); } @@ -52,22 +52,22 @@ public class RoomServiceImpl implements RoomService { } @Override - public Optional find(Node node, String roomId) { - return roomRepository.find(node, roomId); + public Optional find(Instance instance, String roomId) { + return roomRepository.find(instance, roomId); } @Override - public Collection all(Node node) { - return roomRepository.all(node); + public Collection all(Instance instance) { + return roomRepository.all(instance); } @Override - public PickedRoomResponse pickAvailable(Node node, Set users) { - var room = roomRepository.pick(node, users); + public PickedRoomResponse pickAvailable(Instance instance, Set users) { + var room = roomRepository.pick(instance, users); var roomUsers = userRepository.usersOf(room); return new PickedRoomResponse( - room.getNodeIdentifier(), + room.getInstanceIdentifier(), room.getIdentifier(), room.getPayload(), room.getMaxSlots(), diff --git a/server/src/main/java/ru/dragonestia/picker/storage/InstanceAndRoomStorage.java b/server/src/main/java/ru/dragonestia/picker/storage/InstanceAndRoomStorage.java new file mode 100644 index 0000000..da5d787 --- /dev/null +++ b/server/src/main/java/ru/dragonestia/picker/storage/InstanceAndRoomStorage.java @@ -0,0 +1,17 @@ +package ru.dragonestia.picker.storage; + +import ru.dragonestia.picker.model.instance.Instance; +import ru.dragonestia.picker.model.room.Room; + +public interface InstanceAndRoomStorage { + + void loadAll(); + + void saveInstance(Instance instance); + + void removeInstance(Instance instance); + + void saveRoom(Room room); + + void removeRoom(Room room); +} diff --git a/server/src/main/java/ru/dragonestia/picker/storage/NodeAndRoomStorage.java b/server/src/main/java/ru/dragonestia/picker/storage/NodeAndRoomStorage.java deleted file mode 100644 index 27e5ddd..0000000 --- a/server/src/main/java/ru/dragonestia/picker/storage/NodeAndRoomStorage.java +++ /dev/null @@ -1,17 +0,0 @@ -package ru.dragonestia.picker.storage; - -import ru.dragonestia.picker.model.node.Node; -import ru.dragonestia.picker.model.room.Room; - -public interface NodeAndRoomStorage { - - void loadAll(); - - void saveNode(Node node); - - void removeNode(Node node); - - void saveRoom(Room room); - - void removeRoom(Room room); -} diff --git a/server/src/main/java/ru/dragonestia/picker/storage/impl/FileStorageImpl.java b/server/src/main/java/ru/dragonestia/picker/storage/impl/FileStorageImpl.java index 81e967b..21ca0ac 100644 --- a/server/src/main/java/ru/dragonestia/picker/storage/impl/FileStorageImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/storage/impl/FileStorageImpl.java @@ -8,11 +8,11 @@ import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; -import ru.dragonestia.picker.repository.NodeRepository; +import ru.dragonestia.picker.repository.InstanceRepository; import ru.dragonestia.picker.repository.RoomRepository; -import ru.dragonestia.picker.storage.NodeAndRoomStorage; +import ru.dragonestia.picker.storage.InstanceAndRoomStorage; import java.io.File; import java.util.Objects; @@ -21,12 +21,12 @@ import java.util.Objects; @Profile("!test") @Component @RequiredArgsConstructor -public class FileStorageImpl implements NodeAndRoomStorage { +public class FileStorageImpl implements InstanceAndRoomStorage { @Value("${ROOMPICKER_DATA_PATH:./appdata}") private String path; - private final NodeRepository nodeRepository; + private final InstanceRepository instanceRepository; private final RoomRepository roomRepository; private final ObjectMapper objectMapper; @@ -38,14 +38,14 @@ public class FileStorageImpl implements NodeAndRoomStorage { if (!dir.exists()) dir.mkdirs(); - var nodeDir = new File(path + "/nodes"); + var nodeDir = new File(path + "/instances"); if (!nodeDir.exists()) nodeDir.mkdir(); for (var file: Objects.requireNonNull(nodeDir.listFiles(File::isFile))) { try { - var node = reader.readValue(file, Node.class); - nodeRepository.create(node); + var instance = reader.readValue(file, Instance.class); + instanceRepository.create(instance); } catch (Exception ex) { - log.error("Cannot read node file '%s'".formatted(file.getName())); + log.error("Cannot read instance file '%s'".formatted(file.getName())); log.throwing(ex); } } @@ -64,31 +64,31 @@ public class FileStorageImpl implements NodeAndRoomStorage { } @Override - public void saveNode(Node node) { - if (!node.isPersist()) return; - var nodeFile = new File(path + "/nodes/" + node.getIdentifier() + ".json"); + public void saveInstance(Instance instance) { + if (!instance.isPersist()) return; + var instanceFile = new File(path + "/instances/" + instance.getIdentifier() + ".json"); var writer = objectMapper.writer(); try { - writer.writeValue(nodeFile, node); + writer.writeValue(instanceFile, instance); } catch (Exception ex) { throw new RuntimeException(ex); } } @Override - public void removeNode(Node node) { - if (!node.isPersist()) return; - new File(path + "/nodes/" + node.getIdentifier() + ".json").delete(); + public void removeInstance(Instance instance) { + if (!instance.isPersist()) return; + new File(path + "/nodes/" + instance.getIdentifier() + ".json").delete(); - log.info("Removed node '%s' from disk storage".formatted(node.getIdentifier())); + log.info("Removed instance '%s' from disk storage".formatted(instance.getIdentifier())); } @SneakyThrows @Override public void saveRoom(Room room) { if (!room.isPersist()) return; - var roomFile = new File("%s/rooms/%s.%s.json".formatted(path, room.getNodeIdentifier(), room.getIdentifier())); + var roomFile = new File("%s/rooms/%s.%s.json".formatted(path, room.getInstanceIdentifier(), room.getIdentifier())); var writer = objectMapper.writer(); try { @@ -101,8 +101,8 @@ public class FileStorageImpl implements NodeAndRoomStorage { @Override public void removeRoom(Room room) { if (!room.isPersist()) return; - new File("%s/rooms/%s.%s.json".formatted(path, room.getNodeIdentifier(), room.getIdentifier())).delete(); + new File("%s/rooms/%s.%s.json".formatted(path, room.getInstanceIdentifier(), room.getIdentifier())).delete(); - log.info("Removed room '%s/%s' from disk storage".formatted(room.getNodeIdentifier(), room.getIdentifier())); + log.info("Removed room '%s/%s' from disk storage".formatted(room.getInstanceIdentifier(), room.getIdentifier())); } } diff --git a/server/src/main/java/ru/dragonestia/picker/storage/impl/NullStorageImpl.java b/server/src/main/java/ru/dragonestia/picker/storage/impl/NullStorageImpl.java index a015ca1..8003503 100644 --- a/server/src/main/java/ru/dragonestia/picker/storage/impl/NullStorageImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/storage/impl/NullStorageImpl.java @@ -2,22 +2,22 @@ package ru.dragonestia.picker.storage.impl; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.room.Room; -import ru.dragonestia.picker.storage.NodeAndRoomStorage; +import ru.dragonestia.picker.storage.InstanceAndRoomStorage; @Profile("test") @Component -public class NullStorageImpl implements NodeAndRoomStorage { +public class NullStorageImpl implements InstanceAndRoomStorage { @Override public void loadAll() {} @Override - public void saveNode(Node node) {} + public void saveInstance(Instance instance) {} @Override - public void removeNode(Node node) {} + public void removeInstance(Instance instance) {} @Override public void saveRoom(Room room) {} diff --git a/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java b/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java index 9b97805..5dc645e 100644 --- a/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java +++ b/server/src/main/java/ru/dragonestia/picker/util/NamingValidator.java @@ -1,7 +1,7 @@ package ru.dragonestia.picker.util; import org.springframework.stereotype.Component; -import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException; +import ru.dragonestia.picker.api.exception.InvalidInstanceIdentifierException; import ru.dragonestia.picker.api.exception.InvalidRoomIdentifierException; import ru.dragonestia.picker.api.exception.InvalidUsernamesException; import ru.dragonestia.picker.api.repository.type.UserIdentifier; @@ -14,10 +14,10 @@ import java.util.LinkedList; @Component public class NamingValidator { - public void validateNodeId(String input) throws InvalidNodeIdentifierException { + public void validateInstanceId(String input) throws InvalidInstanceIdentifierException { if (IdentifierValidator.forNode(input)) return; - throw new InvalidNodeIdentifierException(input); + throw new InvalidInstanceIdentifierException(input); } public void validateRoomId(String nodeId, String input) throws InvalidRoomIdentifierException { diff --git a/server/src/main/resources/graphql/schema.graphqls b/server/src/main/resources/graphql/schema.graphqls index 0144898..de9efdd 100644 --- a/server/src/main/resources/graphql/schema.graphqls +++ b/server/src/main/resources/graphql/schema.graphqls @@ -1,13 +1,13 @@ type Query { - allNodes: [Node] - nodeById(id: String!): Node + allInstances: [Instance] + instanceById(id: String!): Instance allRooms(nodeId: String!): [Room] roomById(nodeId: String!, roomId: String!): Room userById(id: String!): User! searchUser(input: String!): [User] } -type Node { +type Instance { id: String! method: String! rooms: [Room] @@ -17,8 +17,8 @@ type Node { type Room { id: String! - nodeId: String! - node: Node! + instanceId: String! + instance: Instance! slots: Int! payload: String! locked: Boolean! diff --git a/server/src/test/java/ru/dragonestia/picker/config/FillingNodesConfig.java b/server/src/test/java/ru/dragonestia/picker/config/FillingNodesConfig.java index 1b43b74..6d8b47e 100644 --- a/server/src/test/java/ru/dragonestia/picker/config/FillingNodesConfig.java +++ b/server/src/test/java/ru/dragonestia/picker/config/FillingNodesConfig.java @@ -7,10 +7,10 @@ import ru.dragonestia.picker.api.model.node.PickingMethod; import ru.dragonestia.picker.api.repository.type.NodeIdentifier; import ru.dragonestia.picker.api.repository.type.RoomIdentifier; import ru.dragonestia.picker.api.repository.type.UserIdentifier; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.user.User; import ru.dragonestia.picker.model.factory.RoomFactory; -import ru.dragonestia.picker.repository.NodeRepository; +import ru.dragonestia.picker.repository.InstanceRepository; import ru.dragonestia.picker.repository.RoomRepository; import ru.dragonestia.picker.repository.UserRepository; @@ -39,7 +39,7 @@ public class FillingNodesConfig { */ @Autowired - private NodeRepository nodeRepository; + private InstanceRepository instanceRepository; @Autowired private RoomRepository roomRepository; @@ -50,45 +50,45 @@ public class FillingNodesConfig { @Autowired private RoomFactory roomFactory; - private Node seqNode; - private Node roundNode; - private Node leastNode; + private Instance seqInstance; + private Instance roundInstance; + private Instance leastInstance; @Bean void createSequentialFillingNode() { - var node = new Node(NodeIdentifier.of("seq"), PickingMethod.SEQUENTIAL_FILLING, false); - nodeRepository.create(node); + var node = new Instance(NodeIdentifier.of("seq"), PickingMethod.SEQUENTIAL_FILLING, false); + instanceRepository.create(node); fillNode(node); - seqNode = node; + seqInstance = node; } @Bean void createRoundRobinNode() { - var node = new Node(NodeIdentifier.of("round"), PickingMethod.ROUND_ROBIN, false); - nodeRepository.create(node); + var node = new Instance(NodeIdentifier.of("round"), PickingMethod.ROUND_ROBIN, false); + instanceRepository.create(node); fillNode(node); - roundNode = node; + roundInstance = node; } @Bean void createLeastPickerNode() { - var node = new Node(NodeIdentifier.of("least"), PickingMethod.LEAST_PICKED, false); - nodeRepository.create(node); + var node = new Instance(NodeIdentifier.of("least"), PickingMethod.LEAST_PICKED, false); + instanceRepository.create(node); fillNode(node); - leastNode = node; + leastInstance = node; } - private void fillNode(Node node) { + private void fillNode(Instance instance) { for (int i = 0, n = 5; i < n; i++) { for (int j = 0; j < 3; j++) { var roomId = "room-" + i + "-" + j; - var room = roomFactory.create(RoomIdentifier.of(roomId), node, n, "", false); + var room = roomFactory.create(RoomIdentifier.of(roomId), instance, n, "", false); roomRepository.create(room); var users = n - i; @@ -103,17 +103,17 @@ public class FillingNodesConfig { } @Bean - Node seqNode() { - return seqNode; + Instance seqNode() { + return seqInstance; } @Bean - Node roundNode() { - return roundNode; + Instance roundNode() { + return roundInstance; } @Bean - Node leastNode() { - return leastNode; + Instance leastNode() { + return leastInstance; } } diff --git a/server/src/test/java/ru/dragonestia/picker/picker/LeastPickedTests.java b/server/src/test/java/ru/dragonestia/picker/picker/LeastPickedTests.java index a3b0f0c..ac8abb9 100644 --- a/server/src/test/java/ru/dragonestia/picker/picker/LeastPickedTests.java +++ b/server/src/test/java/ru/dragonestia/picker/picker/LeastPickedTests.java @@ -12,7 +12,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; import ru.dragonestia.picker.api.exception.NoRoomsAvailableException; import ru.dragonestia.picker.config.FillingNodesConfig; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.repository.RoomRepository; import ru.dragonestia.picker.repository.UserRepository; import ru.dragonestia.picker.util.UserFiller; @@ -35,15 +35,15 @@ public class LeastPickedTests { @Qualifier("leastNode") @Autowired - private Node node; + private Instance instance; @Timeout(value = 1, threadMode = Timeout.ThreadMode.SEPARATE_THREAD) @ParameterizedTest @ArgumentsSource(PickingArgumentProvider.class) void testPicking(String expectedRoomId, int usersAmount) { - var expectedRoomUsers = userRepository.usersOf(roomRepository.find(node, expectedRoomId).orElseThrow()).size(); + var expectedRoomUsers = userRepository.usersOf(roomRepository.find(instance, expectedRoomId).orElseThrow()).size(); - var room = roomRepository.pick(node, userFiller.createRandomUsers(usersAmount)); + var room = roomRepository.pick(instance, userFiller.createRandomUsers(usersAmount)); var slots = room.getMaxSlots(); var users = userRepository.usersOf(room); Assertions.assertTrue(slots == -1 || slots >= users.size()); // check slots limitation @@ -74,6 +74,6 @@ public class LeastPickedTests { @Timeout(value = 1, threadMode = Timeout.ThreadMode.SEPARATE_THREAD) @Test void testNoOneRoomExpected() { // Take 9 users. expected none result - Assertions.assertThrows(NoRoomsAvailableException.class, () -> roomRepository.pick(node, userFiller.createRandomUsers(9))); + Assertions.assertThrows(NoRoomsAvailableException.class, () -> roomRepository.pick(instance, userFiller.createRandomUsers(9))); } } diff --git a/server/src/test/java/ru/dragonestia/picker/picker/RoundRobinTests.java b/server/src/test/java/ru/dragonestia/picker/picker/RoundRobinTests.java index 86920c3..f791d1e 100644 --- a/server/src/test/java/ru/dragonestia/picker/picker/RoundRobinTests.java +++ b/server/src/test/java/ru/dragonestia/picker/picker/RoundRobinTests.java @@ -10,7 +10,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; import ru.dragonestia.picker.api.exception.NoRoomsAvailableException; import ru.dragonestia.picker.config.FillingNodesConfig; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.repository.RoomRepository; import ru.dragonestia.picker.repository.UserRepository; import ru.dragonestia.picker.util.UserFiller; @@ -33,13 +33,13 @@ public class RoundRobinTests { @Qualifier("roundNode") @Autowired - private Node node; + private Instance instance; @Timeout(value = 1, threadMode = Timeout.ThreadMode.SEPARATE_THREAD) @ParameterizedTest @ArgumentsSource(PickingArgumentProvider.class) void testPicking(String expectedRoomId, int usersAmount) { - var room = roomRepository.pick(node, userFiller.createRandomUsers(usersAmount)); + var room = roomRepository.pick(instance, userFiller.createRandomUsers(usersAmount)); var slots = room.getMaxSlots(); var users = userRepository.usersOf(room); Assertions.assertTrue(slots == -1 || slots >= users.size()); // check slots limitation @@ -66,6 +66,6 @@ public class RoundRobinTests { @Timeout(value = 1, threadMode = Timeout.ThreadMode.SEPARATE_THREAD) @Test void testNoOneRoomExpected() { // Take 9 users. expected none result - Assertions.assertThrows(NoRoomsAvailableException.class, () -> roomRepository.pick(node, userFiller.createRandomUsers(9))); + Assertions.assertThrows(NoRoomsAvailableException.class, () -> roomRepository.pick(instance, userFiller.createRandomUsers(9))); } } diff --git a/server/src/test/java/ru/dragonestia/picker/picker/SequentialFillingTests.java b/server/src/test/java/ru/dragonestia/picker/picker/SequentialFillingTests.java index 824dace..b48780e 100644 --- a/server/src/test/java/ru/dragonestia/picker/picker/SequentialFillingTests.java +++ b/server/src/test/java/ru/dragonestia/picker/picker/SequentialFillingTests.java @@ -12,7 +12,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; import ru.dragonestia.picker.api.exception.NoRoomsAvailableException; import ru.dragonestia.picker.config.FillingNodesConfig; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.repository.RoomRepository; import ru.dragonestia.picker.repository.UserRepository; import ru.dragonestia.picker.util.UserFiller; @@ -35,15 +35,15 @@ public class SequentialFillingTests { @Qualifier("seqNode") @Autowired - private Node node; + private Instance instance; @Timeout(value = 1, threadMode = Timeout.ThreadMode.SEPARATE_THREAD) @ParameterizedTest @ArgumentsSource(PickingArgumentProvider.class) void testPicking(String expectedRoomId, int usersAmount) { - var expectedRoomUsers = userRepository.usersOf(roomRepository.find(node, expectedRoomId).orElseThrow()).size(); + var expectedRoomUsers = userRepository.usersOf(roomRepository.find(instance, expectedRoomId).orElseThrow()).size(); - var room = roomRepository.pick(node, userFiller.createRandomUsers(usersAmount)); + var room = roomRepository.pick(instance, userFiller.createRandomUsers(usersAmount)); var slots = room.getMaxSlots(); var users = userRepository.usersOf(room); Assertions.assertTrue(slots == -1 || slots >= users.size()); // check slots limitation @@ -71,6 +71,6 @@ public class SequentialFillingTests { @Timeout(value = 1, threadMode = Timeout.ThreadMode.SEPARATE_THREAD) @Test void testNoOneRoomExpected() { // Take 9 users. expected none result - Assertions.assertThrows(NoRoomsAvailableException.class, () -> roomRepository.pick(node, userFiller.createRandomUsers(9))); + Assertions.assertThrows(NoRoomsAvailableException.class, () -> roomRepository.pick(instance, userFiller.createRandomUsers(9))); } } diff --git a/server/src/test/java/ru/dragonestia/picker/service/InstanceServiceTests.java b/server/src/test/java/ru/dragonestia/picker/service/InstanceServiceTests.java new file mode 100644 index 0000000..6ed111e --- /dev/null +++ b/server/src/test/java/ru/dragonestia/picker/service/InstanceServiceTests.java @@ -0,0 +1,57 @@ +package ru.dragonestia.picker.service; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.test.context.support.WithMockUser; +import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; +import ru.dragonestia.picker.api.model.node.PickingMethod; +import ru.dragonestia.picker.api.repository.type.NodeIdentifier; +import ru.dragonestia.picker.model.instance.Instance; + +import java.util.List; + +@SpringBootTest +public class InstanceServiceTests { + + @Autowired + private InstanceService instanceService; + + @WithMockUser(roles = {"NODE_MANAGEMENT"}) + @Test + void test_nodeCreateAndRemove() { + var node = new Instance(NodeIdentifier.of("test"), PickingMethod.SEQUENTIAL_FILLING, false); + + Assertions.assertDoesNotThrow(() -> instanceService.create(node)); + Assertions.assertTrue(instanceService.find(node.getIdentifier()).isPresent()); + Assertions.assertThrows(NodeAlreadyExistException.class, () -> instanceService.create(node)); + + instanceService.remove(node); + + Assertions.assertFalse(() -> instanceService.find(node.getIdentifier()).isPresent()); + } + + @WithMockUser(roles = {"NODE_MANAGEMENT"}) + @Test + void test_allNodes() { + instanceService.all().forEach(node -> instanceService.remove(node)); + + var nodes = List.of( + new Instance(NodeIdentifier.of("test1"), PickingMethod.SEQUENTIAL_FILLING, false), + new Instance(NodeIdentifier.of("test2"), PickingMethod.ROUND_ROBIN, false), + new Instance(NodeIdentifier.of("test3"), PickingMethod.ROUND_ROBIN, false) + ); + + nodes.forEach(node -> instanceService.create(node)); + + var list = instanceService.all(); + + Assertions.assertEquals(nodes.size(), list.size()); + Assertions.assertTrue(list.containsAll(nodes)); + + nodes.forEach(node -> instanceService.remove(node)); + + Assertions.assertEquals(0, instanceService.all().size()); + } +} diff --git a/server/src/test/java/ru/dragonestia/picker/service/NodeServiceTests.java b/server/src/test/java/ru/dragonestia/picker/service/NodeServiceTests.java deleted file mode 100644 index ec0034f..0000000 --- a/server/src/test/java/ru/dragonestia/picker/service/NodeServiceTests.java +++ /dev/null @@ -1,57 +0,0 @@ -package ru.dragonestia.picker.service; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.security.test.context.support.WithMockUser; -import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; -import ru.dragonestia.picker.api.model.node.PickingMethod; -import ru.dragonestia.picker.api.repository.type.NodeIdentifier; -import ru.dragonestia.picker.model.node.Node; - -import java.util.List; - -@SpringBootTest -public class NodeServiceTests { - - @Autowired - private NodeService nodeService; - - @WithMockUser(roles = {"NODE_MANAGEMENT"}) - @Test - void test_nodeCreateAndRemove() { - var node = new Node(NodeIdentifier.of("test"), PickingMethod.SEQUENTIAL_FILLING, false); - - Assertions.assertDoesNotThrow(() -> nodeService.create(node)); - Assertions.assertTrue(nodeService.find(node.getIdentifier()).isPresent()); - Assertions.assertThrows(NodeAlreadyExistException.class, () -> nodeService.create(node)); - - nodeService.remove(node); - - Assertions.assertFalse(() -> nodeService.find(node.getIdentifier()).isPresent()); - } - - @WithMockUser(roles = {"NODE_MANAGEMENT"}) - @Test - void test_allNodes() { - nodeService.all().forEach(node -> nodeService.remove(node)); - - var nodes = List.of( - new Node(NodeIdentifier.of("test1"), PickingMethod.SEQUENTIAL_FILLING, false), - new Node(NodeIdentifier.of("test2"), PickingMethod.ROUND_ROBIN, false), - new Node(NodeIdentifier.of("test3"), PickingMethod.ROUND_ROBIN, false) - ); - - nodes.forEach(node -> nodeService.create(node)); - - var list = nodeService.all(); - - Assertions.assertEquals(nodes.size(), list.size()); - Assertions.assertTrue(list.containsAll(nodes)); - - nodes.forEach(node -> nodeService.remove(node)); - - Assertions.assertEquals(0, nodeService.all().size()); - } -} diff --git a/server/src/test/java/ru/dragonestia/picker/service/RoomServiceTests.java b/server/src/test/java/ru/dragonestia/picker/service/RoomServiceTests.java index 42dea0f..ffe0921 100644 --- a/server/src/test/java/ru/dragonestia/picker/service/RoomServiceTests.java +++ b/server/src/test/java/ru/dragonestia/picker/service/RoomServiceTests.java @@ -15,7 +15,7 @@ import ru.dragonestia.picker.api.model.room.IRoom; import ru.dragonestia.picker.api.repository.type.NodeIdentifier; import ru.dragonestia.picker.api.repository.type.RoomIdentifier; import ru.dragonestia.picker.api.repository.type.UserIdentifier; -import ru.dragonestia.picker.model.node.Node; +import ru.dragonestia.picker.model.instance.Instance; import ru.dragonestia.picker.model.user.User; import ru.dragonestia.picker.model.factory.RoomFactory; @@ -26,7 +26,7 @@ import java.util.Set; public class RoomServiceTests { @Autowired - private NodeService nodeService; + private InstanceService instanceService; @Autowired private RoomService roomService; @@ -34,44 +34,44 @@ public class RoomServiceTests { @Autowired private RoomFactory roomFactory; - private Node node; + private Instance instance; @BeforeEach void init() { - node = new Node(NodeIdentifier.of("test-rooms"), PickingMethod.SEQUENTIAL_FILLING, false); + instance = new Instance(NodeIdentifier.of("test-rooms"), PickingMethod.SEQUENTIAL_FILLING, false); try { - nodeService.create(node); + instanceService.create(instance); } catch (NodeAlreadyExistException ignore) {} } @WithMockUser(roles = {"NODE_MANAGEMENT"}) @Test void test_createAndRemove() { - var room = roomFactory.create(RoomIdentifier.of("test-room"), node, IRoom.UNLIMITED_SLOTS, "", false); + var room = roomFactory.create(RoomIdentifier.of("test-room"), instance, IRoom.UNLIMITED_SLOTS, "", false); roomService.create(room); - Assertions.assertTrue(roomService.find(node, room.getIdentifier()).isPresent()); + Assertions.assertTrue(roomService.find(instance, room.getIdentifier()).isPresent()); Assertions.assertThrows(RoomAlreadyExistException.class, () -> roomService.create(room)); roomService.remove(room); - Assertions.assertFalse(roomService.find(node, room.getIdentifier()).isPresent()); + Assertions.assertFalse(roomService.find(instance, room.getIdentifier()).isPresent()); } @WithMockUser(roles = {"NODE_MANAGEMENT"}) @Test void test_allRooms() { var rooms = List.of( - roomFactory.create(RoomIdentifier.of("test-room1"), node, 1, "", false), - roomFactory.create(RoomIdentifier.of("test-room2"), node, 2, "", false), - roomFactory.create(RoomIdentifier.of("test-room3"), node, 3, "", false), - roomFactory.create(RoomIdentifier.of("test-room4"), node, IRoom.UNLIMITED_SLOTS, "", false) + roomFactory.create(RoomIdentifier.of("test-room1"), instance, 1, "", false), + roomFactory.create(RoomIdentifier.of("test-room2"), instance, 2, "", false), + roomFactory.create(RoomIdentifier.of("test-room3"), instance, 3, "", false), + roomFactory.create(RoomIdentifier.of("test-room4"), instance, IRoom.UNLIMITED_SLOTS, "", false) ); rooms.forEach(room -> roomService.create(room)); - var list = roomService.all(node); + var list = roomService.all(instance); Assertions.assertEquals(rooms.size(), list.size()); Assertions.assertTrue(rooms.containsAll(list)); @@ -81,7 +81,7 @@ public class RoomServiceTests { @Test void test_exceptNotPersistedNode() { Assertions.assertThrows(NotPersistedNodeException.class, () -> { - roomService.create(roomFactory.create(RoomIdentifier.of("1"), node, IRoom.UNLIMITED_SLOTS, "", true)); + roomService.create(roomFactory.create(RoomIdentifier.of("1"), instance, IRoom.UNLIMITED_SLOTS, "", true)); }); } @@ -89,10 +89,10 @@ public class RoomServiceTests { @Test void test_pickRoom() { var rooms = List.of( - roomFactory.create(RoomIdentifier.of("test-room1"), node, 1, "", false), - roomFactory.create(RoomIdentifier.of("test-room2"), node, 2, "", false), - roomFactory.create(RoomIdentifier.of("test-room3"), node, 3, "", false), - roomFactory.create(RoomIdentifier.of("test-room4"), node, IRoom.UNLIMITED_SLOTS, "", false) + roomFactory.create(RoomIdentifier.of("test-room1"), instance, 1, "", false), + roomFactory.create(RoomIdentifier.of("test-room2"), instance, 2, "", false), + roomFactory.create(RoomIdentifier.of("test-room3"), instance, 3, "", false), + roomFactory.create(RoomIdentifier.of("test-room4"), instance, IRoom.UNLIMITED_SLOTS, "", false) ); rooms.forEach(room -> roomService.create(room)); @@ -107,21 +107,21 @@ public class RoomServiceTests { ); - Assertions.assertEquals("test-room4", roomService.pickAvailable(node, users).roomId()); + Assertions.assertEquals("test-room4", roomService.pickAvailable(instance, users).roomId()); } @WithMockUser(roles = {"NODE_MANAGEMENT"}) @Test void test_removeNode() { - nodeService.remove(node); + instanceService.remove(instance); - Assertions.assertThrows(NodeNotFoundException.class, () -> roomService.all(node)); + Assertions.assertThrows(NodeNotFoundException.class, () -> roomService.all(instance)); } @WithMockUser(roles = {"NODE_MANAGEMENT"}) @Test void test_nodeDoesNotExists() { - var node = new Node(NodeIdentifier.of("bruh"), PickingMethod.ROUND_ROBIN, false); + var node = new Instance(NodeIdentifier.of("bruh"), PickingMethod.ROUND_ROBIN, false); var room = roomFactory.create(RoomIdentifier.of("test"), node, IRoom.UNLIMITED_SLOTS, "", false); Assertions.assertThrows(NodeNotFoundException.class, () -> roomService.create(room));