diff --git a/src/main/java/ru/dragonestia/loadbalancer/repository/NodeRepository.java b/src/main/java/ru/dragonestia/loadbalancer/repository/NodeRepository.java new file mode 100644 index 0000000..7f9cec8 --- /dev/null +++ b/src/main/java/ru/dragonestia/loadbalancer/repository/NodeRepository.java @@ -0,0 +1,17 @@ +package ru.dragonestia.loadbalancer.repository; + +import ru.dragonestia.loadbalancer.model.Node; + +import java.util.List; +import java.util.Optional; + +public interface NodeRepository { + + void createNode(Node node); + + void deleteNode(Node node); + + Optional findNode(String nodeId); + + List all(); +} diff --git a/src/main/java/ru/dragonestia/loadbalancer/repository/impl/NodeRepositoryImpl.java b/src/main/java/ru/dragonestia/loadbalancer/repository/impl/NodeRepositoryImpl.java new file mode 100644 index 0000000..dc18e61 --- /dev/null +++ b/src/main/java/ru/dragonestia/loadbalancer/repository/impl/NodeRepositoryImpl.java @@ -0,0 +1,46 @@ +package ru.dragonestia.loadbalancer.repository.impl; + +import ru.dragonestia.loadbalancer.model.Node; +import ru.dragonestia.loadbalancer.repository.NodeRepository; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +public class NodeRepositoryImpl implements NodeRepository { + + private final Map nodeMap = new ConcurrentHashMap<>(); + + @Override + public void createNode(Node node) { + synchronized (nodeMap) { + if (nodeMap.containsKey(node.identifier())) { + throw new IllegalArgumentException("Node with id '" + node.identifier() + "' already exists"); + } + + nodeMap.put(node.identifier(), node); + } + } + + @Override + public void deleteNode(Node node) { + synchronized (nodeMap) { + nodeMap.remove(node.identifier()); + } + } + + @Override + public Optional findNode(String nodeId) { + synchronized (nodeMap) { + return nodeMap.containsKey(nodeId)? Optional.of(nodeMap.get(nodeId)) : Optional.empty(); + } + } + + @Override + public List all() { + synchronized (nodeMap) { + return nodeMap.values().stream().toList(); + } + } +}