From a9847e8da71cd2ae363c8356508aefb64f32d50c Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Wed, 13 Mar 2024 15:45:28 +0700 Subject: [PATCH] Refactored model Node --- server/build.gradle | 1 + .../ru/dragonestia/picker/model/Node.java | 49 ++++++++++++++++--- .../ru/dragonestia/picker/model/Room.java | 2 +- .../repository/impl/NodeRepositoryImpl.java | 16 +++--- .../repository/impl/RoomRepositoryImpl.java | 12 ++--- .../picker/service/impl/NodeServiceImpl.java | 2 +- .../picker/service/impl/RoomServiceImpl.java | 4 +- .../picker/storage/impl/FileStorageImpl.java | 10 ++-- .../picker/util/DetailsExtractor.java | 2 +- 9 files changed, 66 insertions(+), 32 deletions(-) diff --git a/server/build.gradle b/server/build.gradle index 7bb57bf..af76d89 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -11,6 +11,7 @@ configurations { dependencies { implementation project(":client-api") + implementation 'org.jetbrains:annotations:24.1.0' developmentOnly("org.springframework.boot:spring-boot-devtools") implementation 'org.springframework.boot:spring-boot-starter-aop' implementation 'org.springframework.boot:spring-boot-starter-security' diff --git a/server/src/main/java/ru/dragonestia/picker/model/Node.java b/server/src/main/java/ru/dragonestia/picker/model/Node.java index 7182eb0..59a18ac 100644 --- a/server/src/main/java/ru/dragonestia/picker/model/Node.java +++ b/server/src/main/java/ru/dragonestia/picker/model/Node.java @@ -1,14 +1,51 @@ package ru.dragonestia.picker.model; -import lombok.NonNull; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import ru.dragonestia.picker.api.model.node.INode; +import ru.dragonestia.picker.api.model.node.NodeDetails; import ru.dragonestia.picker.api.model.node.PickingMethod; import ru.dragonestia.picker.api.model.node.ResponseNode; -public record Node(@NonNull String id, @NonNull PickingMethod method, boolean persist) { +public class Node implements INode { + + private final String identifier; + private final PickingMethod pickingMethod; + private final boolean persist; + + public Node(@NotNull String identifier, @NotNull PickingMethod pickingMethod, boolean persist) { + this.identifier = identifier; + this.pickingMethod = pickingMethod; + this.persist = persist; + } + + @Override + public @NotNull String getIdentifier() { + return identifier; + } + + @Override + public @NotNull PickingMethod getPickingMethod() { + return pickingMethod; + } + + @Override + public @NotNull Boolean isPersist() { + return persist; + } + + @Override + public @Nullable String getDetail(@NotNull NodeDetails detail) { + throw new UnsupportedOperationException(); + } + + public @NotNull ResponseNode toResponseObject() { + return new ResponseNode(identifier, pickingMethod); + } @Override public int hashCode() { - return id.hashCode(); + return identifier.hashCode(); } @Override @@ -16,12 +53,8 @@ public record Node(@NonNull String id, @NonNull PickingMethod method, boolean pe if (object == this) return true; if (object == null) return false; if (object instanceof Node other) { - return id.equals(other.id); + return identifier.equals(other.identifier); } return false; } - - public ResponseNode toResponseObject() { - return new ResponseNode(id, method); - } } diff --git a/server/src/main/java/ru/dragonestia/picker/model/Room.java b/server/src/main/java/ru/dragonestia/picker/model/Room.java index 5f7773a..8804c7d 100644 --- a/server/src/main/java/ru/dragonestia/picker/model/Room.java +++ b/server/src/main/java/ru/dragonestia/picker/model/Room.java @@ -21,7 +21,7 @@ public class Room { private boolean locked = false; public static Room create(String roomId, Node node, SlotLimit limit, String payload, boolean persist) { - return new Room(roomId, node.id(), limit, payload, persist); + return new Room(roomId, node.getIdentifier(), limit, payload, persist); } public void setLocked(boolean value) { 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 index 2a34b35..39f442c 100644 --- a/server/src/main/java/ru/dragonestia/picker/repository/impl/NodeRepositoryImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/repository/impl/NodeRepositoryImpl.java @@ -26,13 +26,13 @@ public class NodeRepositoryImpl implements NodeRepository { @Override public void create(Node node) throws NodeAlreadyExistException { synchronized (nodeMap) { - if (nodeMap.containsKey(node.id())) { - throw new NodeAlreadyExistException(node.id()); + if (nodeMap.containsKey(node.getIdentifier())) { + throw new NodeAlreadyExistException(node.getIdentifier()); } - nodeMap.put(node.id(), node); - var picker = pickerRepository.create(node.id(), node.method()); - nodeId2PickerModeCache.put(node.id(), picker); + nodeMap.put(node.getIdentifier(), node); + var picker = pickerRepository.create(node.getIdentifier(), node.getPickingMethod()); + nodeId2PickerModeCache.put(node.getIdentifier(), picker); } roomRepository.onCreateNode(node); @@ -41,9 +41,9 @@ public class NodeRepositoryImpl implements NodeRepository { @Override public List delete(Node node) { synchronized (nodeMap) { - nodeMap.remove(node.id()); - pickerRepository.remove(node.id()); - nodeId2PickerModeCache.remove(node.id()); + nodeMap.remove(node.getIdentifier()); + pickerRepository.remove(node.getIdentifier()); + nodeId2PickerModeCache.remove(node.getIdentifier()); } return roomRepository.onRemoveNode(node); 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 caf9193..ef2a837 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 @@ -28,7 +28,7 @@ public class RoomRepositoryImpl implements RoomRepository { synchronized (node2roomsMap) { var node = node2roomsMap.keySet().stream() - .filter(n -> room.getNodeId().equals(n.id())) + .filter(n -> room.getNodeId().equals(n.getIdentifier())) .findFirst(); if (node.isEmpty()) { @@ -48,7 +48,7 @@ public class RoomRepositoryImpl implements RoomRepository { public void remove(Room room) { var nodeId = room.getNodeId(); var node = node2roomsMap.keySet().stream() - .filter(n -> room.getNodeId().equals(n.id())) + .filter(n -> room.getNodeId().equals(n.getIdentifier())) .findFirst(); synchronized (node2roomsMap) { @@ -67,7 +67,7 @@ public class RoomRepositoryImpl implements RoomRepository { public Optional find(Node node, String identifier) { synchronized (node2roomsMap) { if (!node2roomsMap.containsKey(node)) { - throw new NodeNotFoundException("Node '" + node.id() + "' does not exist"); + throw new NodeNotFoundException("Node '" + node.getIdentifier() + "' does not exist"); } var result = node2roomsMap.get(node).getOrDefault(identifier, null); @@ -79,7 +79,7 @@ public class RoomRepositoryImpl implements RoomRepository { public List all(Node node) { synchronized (node2roomsMap) { if (!node2roomsMap.containsKey(node)) { - throw new NodeNotFoundException("Node '%s' does not exists".formatted(node.id())); + throw new NodeNotFoundException("Node '%s' does not exists".formatted(node.getIdentifier())); } return node2roomsMap.get(node).values().stream().map(RoomContainer::room).toList(); @@ -90,12 +90,12 @@ public class RoomRepositoryImpl implements RoomRepository { public Optional pickFree(Node node, Collection users) { synchronized (node2roomsMap) { if (!node2roomsMap.containsKey(node)) { - throw new NodeNotFoundException("Node '" + node.id() + "' does not exist"); + throw new NodeNotFoundException("Node '" + node.getIdentifier() + "' does not exist"); } Room room = null; try { - room = pickerRepository.pick(node.id(), users); + room = pickerRepository.pick(node.getIdentifier(), users); } catch (RuntimeException ignore) {} // TODO: may be problem. Check it later Optional container = room == null? 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 index 88f1888..3ec93ed 100644 --- a/server/src/main/java/ru/dragonestia/picker/service/impl/NodeServiceImpl.java +++ b/server/src/main/java/ru/dragonestia/picker/service/impl/NodeServiceImpl.java @@ -29,7 +29,7 @@ public class NodeServiceImpl implements NodeService { @Override public void create(Node node) throws InvalidNodeIdentifierException, NodeAlreadyExistException { - namingValidator.validateNodeId(node.id()); + namingValidator.validateNodeId(node.getIdentifier()); nodeRepository.create(node); storage.saveNode(node); } 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 e825c2d..fba0517 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 @@ -44,8 +44,8 @@ public class RoomServiceImpl implements RoomService { namingValidator.validateRoomId(room.getNodeId(), room.getId()); var node = nodeRepository.find(room.getNodeId()).orElseThrow(() -> new NodeNotFoundException(room.getNodeId())); - if (!node.persist() && room.isPersist()) { - throw new NotPersistedNodeException(node.id(), room.getId()); + if (!node.isPersist() && room.isPersist()) { + throw new NotPersistedNodeException(node.getIdentifier(), room.getId()); } roomRepository.create(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 529708c..b6d984e 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 @@ -65,8 +65,8 @@ public class FileStorageImpl implements NodeAndRoomStorage { @Override public void saveNode(Node node) { - if (!node.persist()) return; - var nodeFile = new File(path + "/nodes/" + node.id() + ".json"); + if (!node.isPersist()) return; + var nodeFile = new File(path + "/nodes/" + node.getIdentifier() + ".json"); var writer = objectMapper.writer(); try { @@ -78,10 +78,10 @@ public class FileStorageImpl implements NodeAndRoomStorage { @Override public void removeNode(Node node) { - if (!node.persist()) return; - new File(path + "/nodes/" + node.id() + ".json").delete(); + if (!node.isPersist()) return; + new File(path + "/nodes/" + node.getIdentifier() + ".json").delete(); - log.info("Removed node '%s' from disk storage".formatted(node.id())); + log.info("Removed node '%s' from disk storage".formatted(node.getIdentifier())); } @SneakyThrows diff --git a/server/src/main/java/ru/dragonestia/picker/util/DetailsExtractor.java b/server/src/main/java/ru/dragonestia/picker/util/DetailsExtractor.java index 7bad143..8afe83a 100644 --- a/server/src/main/java/ru/dragonestia/picker/util/DetailsExtractor.java +++ b/server/src/main/java/ru/dragonestia/picker/util/DetailsExtractor.java @@ -30,7 +30,7 @@ public class DetailsExtractor { for (var detail: details) { if (detail == NodeDetails.PERSIST) { - response.putDetail(NodeDetails.PERSIST, Boolean.toString(node.persist())); + response.putDetail(NodeDetails.PERSIST, Boolean.toString(node.isPersist())); continue; } }