createNode method
Implementation
Future<Node> createNode(NodeCreate nodeCreate) async {
nodeCreate.validate();
final id = _uuid.v4();
var rootId = id;
String pathHash;
final previousId = nodeCreate.validPrevious;
if (previousId != null) {
try {
final parentNode = await _repository.get(previousId);
rootId = parentNode.validRoot;
final parentPath = parentNode.validPathHash;
final siblingCount = await _getSiblingCount(previousId);
pathHash =
PathHashGenerator.generateChildPath(parentPath, siblingCount + 1);
} on RepositoryException {
throw Exception('Parent node not found: $previousId');
}
} else {
pathHash = nodeCreate.pathHash ?? PathHashGenerator.generateRootPath();
}
final node = NodeExtensions.create(
id: id,
root: rootId,
previous: previousId,
pathHash: pathHash,
content: nodeCreate.content.toMap(),
);
node.validate();
return _repository.add(IdentifiedObject(node.validId, node));
}