Documented Nodes
This commit is contained in:
parent
b178056b32
commit
2d1bf1434b
@ -7,6 +7,8 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation 'io.swagger.core.v3:swagger-annotations:2.2.20'
|
||||||
|
|
||||||
testImplementation platform('org.junit:junit-bom:5.9.1')
|
testImplementation platform('org.junit:junit-bom:5.9.1')
|
||||||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,13 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response;
|
package ru.dragonestia.picker.api.repository.response;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public record ErrorResponse(String errorId, String message, Map<String, String> details) {}
|
@Schema(
|
||||||
|
name = "ErrorResponse",
|
||||||
|
description = "Response with error info"
|
||||||
|
)
|
||||||
|
public record ErrorResponse(String errorId,
|
||||||
|
String message,
|
||||||
|
Map<String, String> details) {}
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response;
|
package ru.dragonestia.picker.api.repository.response;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RNode;
|
import ru.dragonestia.picker.api.repository.response.type.RNode;
|
||||||
|
|
||||||
|
@Schema(title = "Node details", hidden = true)
|
||||||
public record NodeDetailsResponse(RNode node) {}
|
public record NodeDetailsResponse(RNode node) {}
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response;
|
package ru.dragonestia.picker.api.repository.response;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.RNode;
|
import ru.dragonestia.picker.api.repository.response.type.RNode;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Schema(title = "List of nodes", hidden = true)
|
||||||
public record NodeListResponse(List<RNode> nodes) {}
|
public record NodeListResponse(List<RNode> nodes) {}
|
||||||
|
|||||||
@ -1,15 +1,22 @@
|
|||||||
package ru.dragonestia.picker.api.repository.response.type;
|
package ru.dragonestia.picker.api.repository.response.type;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import ru.dragonestia.picker.api.repository.response.type.type.PickingMode;
|
import ru.dragonestia.picker.api.repository.response.type.type.PickingMode;
|
||||||
import ru.dragonestia.picker.api.repository.details.NodeDetails;
|
import ru.dragonestia.picker.api.repository.details.NodeDetails;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Schema(title = "Node")
|
||||||
public class RNode {
|
public class RNode {
|
||||||
|
|
||||||
|
@Schema(description = "Node identifier", example = "test-node")
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
|
@Schema(description = "Picking mode method for users between rooms", example = "LEAST_PICKED")
|
||||||
private PickingMode mode;
|
private PickingMode mode;
|
||||||
|
|
||||||
|
@Schema(description = "Additional data requested (Key-Value)")
|
||||||
private Map<NodeDetails, String> details;
|
private Map<NodeDetails, String> details;
|
||||||
|
|
||||||
private RNode() {}
|
private RNode() {}
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
package ru.dragonestia.picker.controller;
|
package ru.dragonestia.picker.controller;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
@ -15,6 +18,7 @@ import ru.dragonestia.picker.util.NamingValidator;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@Tag(name = "Nodes", description = "Node management")
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/nodes")
|
@RequestMapping("/nodes")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -25,21 +29,30 @@ public class NodeController {
|
|||||||
private final DetailsParser detailsParser;
|
private final DetailsParser detailsParser;
|
||||||
private final NamingValidator namingValidator;
|
private final NamingValidator namingValidator;
|
||||||
|
|
||||||
|
@Operation(summary = "Get all nodes")
|
||||||
@GetMapping
|
@GetMapping
|
||||||
NodeListResponse allNodes(@RequestParam(name = "requiredDetails", required = false, defaultValue = "") String detailsSeq) {
|
NodeListResponse allNodes(
|
||||||
|
@RequestParam(name = "requiredDetails", required = false, defaultValue = "") String detailsSeq
|
||||||
|
) {
|
||||||
return new NodeListResponse(nodeService.getAllNodesWithDetailsResponse(detailsParser.parseNodeDetails(detailsSeq)));
|
return new NodeListResponse(nodeService.getAllNodesWithDetailsResponse(detailsParser.parseNodeDetails(detailsSeq)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "Register new node")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
ResponseEntity<?> registerNode(@RequestParam(name = "nodeId") String nodeId,
|
ResponseEntity<?> registerNode(
|
||||||
@RequestParam(name = "method") PickingMode method) {
|
@Parameter(description = "Node identifier") @RequestParam(name = "nodeId") String nodeId,
|
||||||
|
@Parameter(description = "Picking mode method") @RequestParam(name = "method") PickingMode method
|
||||||
|
) {
|
||||||
|
|
||||||
nodeService.create(new Node(nodeId, method));
|
nodeService.create(new Node(nodeId, method));
|
||||||
return ResponseEntity.ok().build();
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "Get node details")
|
||||||
@GetMapping("/{nodeId}")
|
@GetMapping("/{nodeId}")
|
||||||
ResponseEntity<NodeDetailsResponse> nodeDetails(@PathVariable("nodeId") String nodeId) {
|
ResponseEntity<NodeDetailsResponse> nodeDetails(
|
||||||
|
@Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId
|
||||||
|
) {
|
||||||
namingValidator.validateNodeId(nodeId);
|
namingValidator.validateNodeId(nodeId);
|
||||||
|
|
||||||
return nodeService.find(nodeId)
|
return nodeService.find(nodeId)
|
||||||
@ -47,18 +60,23 @@ public class NodeController {
|
|||||||
.orElseThrow(() -> new NodeNotFoundException(nodeId));
|
.orElseThrow(() -> new NodeNotFoundException(nodeId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "Unregister node")
|
||||||
@DeleteMapping("/{nodeId}")
|
@DeleteMapping("/{nodeId}")
|
||||||
ResponseEntity<?> removeNode(@PathVariable("nodeId") String nodeId) {
|
ResponseEntity<?> removeNode(
|
||||||
|
@Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId
|
||||||
|
) {
|
||||||
namingValidator.validateNodeId(nodeId);
|
namingValidator.validateNodeId(nodeId);
|
||||||
|
|
||||||
nodeService.find(nodeId).ifPresent(nodeService::remove);
|
nodeService.find(nodeId).ifPresent(nodeService::remove);
|
||||||
return ResponseEntity.ok().build();
|
return ResponseEntity.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "Pick node for users")
|
||||||
@PostMapping("/{nodeId}/pick")
|
@PostMapping("/{nodeId}/pick")
|
||||||
ResponseEntity<?> pickRoom(@PathVariable("nodeId") String nodeId,
|
ResponseEntity<?> pickRoom(
|
||||||
@RequestParam(name = "userIds") String userIds) {
|
@Parameter(description = "Node identifier") @PathVariable("nodeId") String nodeId,
|
||||||
|
@Parameter(description = "Users to add", example = "user1,user3,user3") @RequestParam(name = "userIds") String userIds
|
||||||
|
) {
|
||||||
namingValidator.validateNodeId(nodeId);
|
namingValidator.validateNodeId(nodeId);
|
||||||
|
|
||||||
var node = nodeService.find(nodeId).orElseThrow(() -> new NodeNotFoundException(nodeId));
|
var node = nodeService.find(nodeId).orElseThrow(() -> new NodeNotFoundException(nodeId));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user