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.NodeRegisterResponse;
|
||||
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.service.NodeService;
|
||||
import ru.dragonestia.picker.service.RoomService;
|
||||
import ru.dragonestia.picker.util.NamingValidator;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.Optional;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/nodes")
|
||||
@RequiredArgsConstructor
|
||||
public class NodeController {
|
||||
|
||||
private final NodeService nodeService;
|
||||
private final RoomService roomService;
|
||||
|
||||
@GetMapping
|
||||
NodeListResponse allNodes() {
|
||||
@ -61,4 +68,36 @@ public class NodeController {
|
||||
|
||||
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
|
||||
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