override def markAsComplete()

in backend/app/services/manifest/Neo4jManifest.scala [609:658]


  override def markAsComplete(params: ExtractionParams, blob: Blob, extractor: Extractor): Either[Failure, Unit] = transaction { tx =>
    logger.info(s"Marking ${blob.uri.value} / ${extractor.name} as complete")

    val maybeWorkspaceProperties = params.workspace.map { _ =>
      """
        |,
        |workspaceId: {workspaceId},
        |workspaceNodeId: {workspaceNodeId},
        |workspaceBlobUri: {workspaceBlobUri}
        |""".stripMargin
    }.getOrElse("")

    val result = tx.run(
      s"""
        |MATCH (b :Blob:Resource {uri: {uri}})<-[todo:TODO {
        |  ingestion: {ingestion},
        |  parentBlobs: {parentBlobs},
        |  languages: {languages}
        |  ${maybeWorkspaceProperties}
        |}]-(e: Extractor {name: {extractorName}})
        |
        |DELETE todo
        |
        |MERGE (b)<-[:PROCESSED {
        |  ingestion: {ingestion},
        |  parentBlobs: {parentBlobs},
        |  languages: {languages}
        |  ${maybeWorkspaceProperties}
        |}]-(e)
        |""".stripMargin,
      parameters(
        "uri", blob.uri.value,
        "extractorName", extractor.name,
        "ingestion", params.ingestion,
        "languages", params.languages.map(_.key).asJava,
        "parentBlobs", params.parentBlobs.map(_.value).asJava,
        "workspaceId", params.workspace.map(_.workspaceId).orNull,
        "workspaceNodeId", params.workspace.map(_.workspaceNodeId).orNull,
        "workspaceBlobUri", params.workspace.map(_.blobAddedToWorkspace).orNull
      )
    )

    val counters = result.summary().counters()

    if(counters.relationshipsCreated() != 1 || counters.relationshipsDeleted() != 1) {
      Left(IllegalStateFailure(s"Unexpected number of creates/deletes in markAsComplete. Created: ${counters.relationshipsCreated()}. Deleted: ${counters.relationshipsDeleted()}"))
    } else {
      Right(())
    }
  }