Refactored model Node
This commit is contained in:
parent
cb76bd1604
commit
a9847e8da7
@ -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'
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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<Room> 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);
|
||||
|
||||
@ -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<Room> 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<Room> 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<Room> pickFree(Node node, Collection<User> 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<RoomContainer> container = room == null?
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user