diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/repository/NodeRepository.java b/client-api/src/main/java/ru/dragonestia/picker/api/repository/NodeRepository.java index 18927bc..ec71aa9 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/repository/NodeRepository.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/repository/NodeRepository.java @@ -1,27 +1,24 @@ package ru.dragonestia.picker.api.repository; -import ru.dragonestia.picker.api.exception.InvalidNodeIdentifierException; -import ru.dragonestia.picker.api.exception.NodeAlreadyExistException; -import ru.dragonestia.picker.api.model.node.NodeDetails; -import ru.dragonestia.picker.api.repository.response.type.RNode; +import org.jetbrains.annotations.NotNull; +import ru.dragonestia.picker.api.model.node.INode; +import ru.dragonestia.picker.api.model.node.NodeDefinition; +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 java.util.List; import java.util.Optional; -import java.util.Set; public interface NodeRepository { - Set ALL_DETAILS = Set.of(NodeDetails.PERSIST); + @NotNull List allNodes(@NotNull GetAllNodes request); - void register(RNode node, boolean persist) throws InvalidNodeIdentifierException, NodeAlreadyExistException; + @NotNull Optional findNodeById(@NotNull FindNodeById request); - default List all() { - return all(Set.of()); - } + void removeNodesById(@NotNull RemoveNodesByIds removeNodesByIds); - List all(Set details); + void removeNode(@NotNull INode node); - Optional find(String nodeId); - - void remove(String nodeId); + void saveNode(@NotNull NodeDefinition definition); } diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/repository/RoomRepository.java b/client-api/src/main/java/ru/dragonestia/picker/api/repository/RoomRepository.java index 8d899d1..b9dd97f 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/repository/RoomRepository.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/repository/RoomRepository.java @@ -1,8 +1,8 @@ package ru.dragonestia.picker.api.repository; import ru.dragonestia.picker.api.exception.*; +import ru.dragonestia.picker.api.model.node.ResponseNode; import ru.dragonestia.picker.api.model.room.RoomDetails; -import ru.dragonestia.picker.api.repository.response.type.RNode; import ru.dragonestia.picker.api.repository.response.type.RRoom; import java.util.List; @@ -17,15 +17,15 @@ public interface RoomRepository { void remove(RRoom room) throws NodeNotFoundException; - void remove(RNode node, RRoom.Short room) throws NodeNotFoundException; + void remove(ResponseNode node, RRoom.Short room) throws NodeNotFoundException; - default List all(RNode node) throws NodeNotFoundException { + default List all(ResponseNode node) throws NodeNotFoundException { return all(node, Set.of()); } - List all(RNode node, Set details) throws NodeNotFoundException; + List all(ResponseNode node, Set details) throws NodeNotFoundException; - Optional find(RNode node, String roomId) throws NodeNotFoundException; + Optional find(ResponseNode node, String roomId) throws NodeNotFoundException; void lock(RRoom room, boolean value) throws NodeNotFoundException, RoomNotFoundException; } diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/FindNodeById.java b/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/FindNodeById.java new file mode 100644 index 0000000..9ae7dfd --- /dev/null +++ b/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/FindNodeById.java @@ -0,0 +1,82 @@ +package ru.dragonestia.picker.api.repository.request.node; + +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import ru.dragonestia.picker.api.model.node.NodeDetails; +import ru.dragonestia.picker.api.repository.type.NodeIdentifier; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class FindNodeById { + + private final String id; + private final Set details; + + private FindNodeById(String id, Set details) { + this.id = id; + this.details = details; + } + + public @NotNull String getId() { + return id; + } + + public @NotNull Set getDetails() { + return details; + } + + @Contract("_ -> new") + public static @NotNull FindNodeById justFind(@NotNull NodeIdentifier identifier) { + return FindNodeById.builder().setId(identifier.getValue()).build(); + } + + @Contract("_ -> new") + public static @NotNull FindNodeById findWithAllDetails(@NotNull NodeIdentifier identifier) { + return FindNodeById.builder() + .setId(identifier.getValue()) + .setDetails(Stream.of(NodeDetails.values()).collect(Collectors.toSet())) + .build(); + } + + public static @NotNull Builder builder() { + return new Builder(); + } + + public static class Builder { + + private String id = null; + private Set details = new HashSet<>(); + + private Builder() {} + + @Contract("_ -> this") + public @NotNull Builder setId(@NotNull String id) { + this.id = id; + return this; + } + + @Contract("_ -> this") + public @NotNull Builder setDetails(@NotNull Set details) { + this.details = details; + return this; + } + + @Contract("_ -> this") + public @NotNull Builder appendDetail(@NotNull NodeDetails detail) { + this.details.add(detail); + return this; + } + + public @NotNull FindNodeById build() { + if (id == null) { + throw new NullPointerException("Id is null"); + } + + return new FindNodeById(id, Collections.unmodifiableSet(details)); + } + } +} diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/GetAllNodes.java b/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/GetAllNodes.java new file mode 100644 index 0000000..c2512db --- /dev/null +++ b/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/GetAllNodes.java @@ -0,0 +1,55 @@ +package ru.dragonestia.picker.api.repository.request.node; + +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import ru.dragonestia.picker.api.model.node.NodeDetails; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class GetAllNodes { + + public static GetAllNodes JUST = GetAllNodes.builder().build(); + public static GetAllNodes WITH_ALL_DETAILS = GetAllNodes.builder() + .setDetails(Stream.of(NodeDetails.values()).collect(Collectors.toSet())).build(); + + private final Set details; + + private GetAllNodes(Set details) { + this.details = details; + } + + public @NotNull Set getDetails() { + return details; + } + + public static @NotNull Builder builder() { + return new Builder(); + } + + public static class Builder { + + private Set details = new HashSet<>(); + + private Builder() {} + + @Contract("_ -> this") + public @NotNull Builder setDetails(@NotNull Set details) { + this.details = details; + return this; + } + + @Contract("_ -> this") + public @NotNull Builder appendDetail(@NotNull NodeDetails detail) { + this.details.add(detail); + return this; + } + + public @NotNull GetAllNodes build() { + return new GetAllNodes(Collections.unmodifiableSet(details)); + } + } +} diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/RemoveNodesByIds.java b/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/RemoveNodesByIds.java new file mode 100644 index 0000000..98b7d5f --- /dev/null +++ b/client-api/src/main/java/ru/dragonestia/picker/api/repository/request/node/RemoveNodesByIds.java @@ -0,0 +1,54 @@ +package ru.dragonestia.picker.api.repository.request.node; + +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import ru.dragonestia.picker.api.repository.type.NodeIdentifier; + +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +public class RemoveNodesByIds { + + private final Set nodeIds; + + private RemoveNodesByIds(Set nodeIds) { + this.nodeIds = nodeIds; + } + + public @NotNull Set getNodeIds() { + return nodeIds; + } + + @Contract("_ -> new") + public static @NotNull RemoveNodesByIds just(@NotNull NodeIdentifier nodeIdentifier) { + return RemoveNodesByIds.builder().appendNodeId(nodeIdentifier).build(); + } + + public static @NotNull Builder builder() { + return new Builder(); + } + + public static class Builder { + + private Set nodeIds = new HashSet<>(); + + private Builder() {} + + @Contract("_ -> this") + public @NotNull Builder setNodeIds(@NotNull HashSet nodeIds) { + this.nodeIds = nodeIds; + return this; + } + + @Contract("_ -> this") + public @NotNull Builder appendNodeId(@NotNull NodeIdentifier nodeId) { + nodeIds.add(nodeId); + return this; + } + + public @NotNull RemoveNodesByIds build() { + return new RemoveNodesByIds(nodeIds.stream().map(obj -> obj.getValue()).collect(Collectors.toSet())); + } + } +} diff --git a/client-api/src/main/java/ru/dragonestia/picker/api/repository/response/NodeDetailsResponse.java b/client-api/src/main/java/ru/dragonestia/picker/api/repository/response/NodeDetailsResponse.java index 572dac4..6782275 100644 --- a/client-api/src/main/java/ru/dragonestia/picker/api/repository/response/NodeDetailsResponse.java +++ b/client-api/src/main/java/ru/dragonestia/picker/api/repository/response/NodeDetailsResponse.java @@ -2,7 +2,6 @@ package ru.dragonestia.picker.api.repository.response; import io.swagger.v3.oas.annotations.media.Schema; import ru.dragonestia.picker.api.model.node.ResponseNode; -import ru.dragonestia.picker.api.repository.response.type.RNode; @Schema(title = "Node details", hidden = true) public record NodeDetailsResponse(ResponseNode node) {}