Prepared mapping for picking room from nodes (refactor later)
This commit is contained in:
parent
75af351fb3
commit
5c71ab050d
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user