From 425fb71f4c7bebea8c8d6e8ab07ae37704d3a79e Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Wed, 13 Mar 2024 11:42:01 +0700 Subject: [PATCH] Implemented NodeRepository --- .../picker/api/model/node/NodeDefinition.java | 2 +- .../impl/repository/NodeRepositoryImpl.java | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/model/node/NodeDefinition.java b/client-api/src/main/java/ru/dragonestia/picker/api/model/node/NodeDefinition.java index f81adaf..95a606c 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/model/node/NodeDefinition.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/model/node/NodeDefinition.java @@ -32,7 +32,7 @@ public class NodeDefinition implements INode { } @Override - public @Nullable Boolean isPersist() { + public @NotNull Boolean isPersist() { return persist; } diff --git a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/NodeRepositoryImpl.java b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/NodeRepositoryImpl.java index 2d79946..195ea65 100644 --- a/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/NodeRepositoryImpl.java +++ b/client-impl/src/main/java/ru/dragonestia/picker/api/impl/repository/NodeRepositoryImpl.java @@ -2,14 +2,19 @@ package ru.dragonestia.picker.api.impl.repository; import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.NotNull; +import ru.dragonestia.picker.api.exception.NodeNotFoundException; import ru.dragonestia.picker.api.impl.RoomPickerClient; +import ru.dragonestia.picker.api.impl.util.EnumUtils; import ru.dragonestia.picker.api.impl.util.RestTemplate; +import ru.dragonestia.picker.api.impl.util.type.HttpMethod; import ru.dragonestia.picker.api.model.node.INode; import ru.dragonestia.picker.api.model.node.NodeDefinition; import ru.dragonestia.picker.api.repository.NodeRepository; import ru.dragonestia.picker.api.repository.request.node.FindNodeById; import ru.dragonestia.picker.api.repository.request.node.GetAllNodes; import ru.dragonestia.picker.api.repository.request.node.RemoveNodesByIds; +import ru.dragonestia.picker.api.repository.response.NodeDetailsResponse; +import ru.dragonestia.picker.api.repository.response.NodeListResponse; import ru.dragonestia.picker.api.repository.response.PickedRoomResponse; import ru.dragonestia.picker.api.repository.type.NodeIdentifier; import ru.dragonestia.picker.api.repository.type.UserIdentifier; @@ -29,27 +34,42 @@ public class NodeRepositoryImpl implements NodeRepository { @Override public @NotNull List allNodes(@NotNull GetAllNodes data) { - throw new UnsupportedOperationException("Not implemented"); + return rest.query("/nodes", HttpMethod.GET, NodeListResponse.class, params -> { + params.put("requiredDetails", EnumUtils.enumSetToString(data.getDetails())); + }).nodes().stream().map(node -> (INode) node).toList(); } @Override public @NotNull Optional findNodeById(@NotNull FindNodeById data) { - throw new UnsupportedOperationException("Not implemented"); + try { + var response = rest.query("/nodes/" + data.getId(), HttpMethod.GET, NodeDetailsResponse.class, params -> { + params.put("requiredDetails", EnumUtils.enumSetToString(data.getDetails())); + }); + return Optional.of(response.node()); + } catch (NodeNotFoundException ex) { + return Optional.empty(); + } } @Override public void removeNodesById(@NotNull RemoveNodesByIds data) { - throw new UnsupportedOperationException("Not implemented"); + rest.query("/nodes", HttpMethod.DELETE, params -> { + params.put("toDelete", String.join(",", data.getNodeIds())); + }); } @Override public void removeNode(@NotNull INode node) { - throw new UnsupportedOperationException("Not implemented"); + rest.query("/nodes/" + node.getIdentifier(), HttpMethod.DELETE, params -> {}); } @Override public void saveNode(@NotNull NodeDefinition definition) { - throw new UnsupportedOperationException("Not implemented"); + rest.query("/nodes", HttpMethod.POST, params -> { + params.put("nodeId", definition.getIdentifier()); + params.put("method", definition.getPickingMethod().name()); + params.put("persist", Boolean.toString(definition.isPersist())); + }); } @Override