Prepared mapping for picking room from nodes (refactor later)

This commit is contained in:
Andrey Terentev 2024-01-13 01:33:06 +07:00
parent 75af351fb3
commit 5c71ab050d
2 changed files with 41 additions and 1 deletions

View File

@ -8,16 +8,23 @@ import ru.dragonestia.picker.controller.response.NodeDetailsResponse;
import ru.dragonestia.picker.controller.response.NodeListResponse; import ru.dragonestia.picker.controller.response.NodeListResponse;
import ru.dragonestia.picker.controller.response.NodeRegisterResponse; import ru.dragonestia.picker.controller.response.NodeRegisterResponse;
import ru.dragonestia.picker.model.Node; import ru.dragonestia.picker.model.Node;
import ru.dragonestia.picker.model.Room;
import ru.dragonestia.picker.model.User;
import ru.dragonestia.picker.model.type.PickingMode; import ru.dragonestia.picker.model.type.PickingMode;
import ru.dragonestia.picker.service.NodeService; import ru.dragonestia.picker.service.NodeService;
import ru.dragonestia.picker.service.RoomService;
import ru.dragonestia.picker.util.NamingValidator; import ru.dragonestia.picker.util.NamingValidator;
import java.util.LinkedList;
import java.util.Optional;
@RestController @RestController
@RequestMapping("/nodes") @RequestMapping("/nodes")
@RequiredArgsConstructor @RequiredArgsConstructor
public class NodeController { public class NodeController {
private final NodeService nodeService; private final NodeService nodeService;
private final RoomService roomService;
@GetMapping @GetMapping
NodeListResponse allNodes() { NodeListResponse allNodes() {
@ -61,4 +68,36 @@ public class NodeController {
return ResponseEntity.ok().build(); return ResponseEntity.ok().build();
} }
@PostMapping("/{nodeId}/pick")
ResponseEntity<?> pickRoom(@PathVariable("nodeId") String nodeId,
@RequestParam(name = "userIds") String userIds) {
if (!NamingValidator.validateNodeId(nodeId)) {
return new ResponseEntity<>(HttpStatusCode.valueOf(404));
}
var nodeOpt = nodeService.find(nodeId);
if (nodeOpt.isEmpty()) {
return new ResponseEntity<>(HttpStatusCode.valueOf(404));
}
var node = nodeOpt.get();
var list = new LinkedList<User>();
for (var username: userIds.split(",")) { // TODO: create warnings about invalid usernames
if (!NamingValidator.validateUserId(username)) continue;
list.add(new User(username));
}
Room room;
try {
room = roomService.pickAvailable(node, list);
} catch (RuntimeException ex) {
return new ResponseEntity<>(HttpStatusCode.valueOf(409));
}
return ResponseEntity.ok(room); // TODO: make other json schema
}
} }

View File

@ -49,6 +49,7 @@ public class RoomServiceImpl implements RoomService {
@Override @Override
public Room pickAvailable(Node node, List<User> users) { public Room pickAvailable(Node node, List<User> users) {
throw new RuntimeException("Not implemented"); return roomRepository.pickFree(node, users)
.orElseThrow(() -> new RuntimeException("There are no rooms available"));
} }
} }