createNode method

Future<Node> createNode(
  1. NodeCreate nodeCreate
)

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));
}