From c1c0c678367cc214184f9bd60459e79fcd5d9777 Mon Sep 17 00:00:00 2001 From: Simon Dumas Date: Wed, 8 May 2024 17:40:19 +0200 Subject: [PATCH] Pass down custom metadata for file creation and update events --- .../nexus/ship/files/FileProcessor.scala | 49 ++++++++++++------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/ship/src/main/scala/ch/epfl/bluebrain/nexus/ship/files/FileProcessor.scala b/ship/src/main/scala/ch/epfl/bluebrain/nexus/ship/files/FileProcessor.scala index b0632fb7ab..5822e67fd5 100644 --- a/ship/src/main/scala/ch/epfl/bluebrain/nexus/ship/files/FileProcessor.scala +++ b/ship/src/main/scala/ch/epfl/bluebrain/nexus/ship/files/FileProcessor.scala @@ -6,7 +6,7 @@ import ch.epfl.bluebrain.nexus.delta.plugins.storage.files.Files import ch.epfl.bluebrain.nexus.delta.plugins.storage.files.Files.definition import ch.epfl.bluebrain.nexus.delta.plugins.storage.files.model.FileEvent._ import ch.epfl.bluebrain.nexus.delta.plugins.storage.files.model.FileRejection.{IncorrectRev, ResourceAlreadyExists} -import ch.epfl.bluebrain.nexus.delta.plugins.storage.files.model.{FileEvent, FileId} +import ch.epfl.bluebrain.nexus.delta.plugins.storage.files.model.{FileAttributes, FileCustomMetadata, FileEvent, FileId} import ch.epfl.bluebrain.nexus.delta.plugins.storage.storages.operations.s3.client.S3StorageClient import ch.epfl.bluebrain.nexus.delta.plugins.storage.storages.{FetchStorage, StorageResource} import ch.epfl.bluebrain.nexus.delta.rdf.jsonld.api.JsonLdApi @@ -49,31 +49,44 @@ class FileProcessor private ( val cRev = event.rev - 1 val project = projectMapper.map(event.project) + def getCustomMetadata(attributes: FileAttributes) = { + val keywords = attributes.keywords + FileCustomMetadata( + attributes.name, + attributes.description, + Option.unless(keywords.isEmpty)(keywords) + ) + } + + val fileId = FileId(event.id, project) + // TODO: Remove the 5_000_000_000L limit when the multipart works correctly event match { case e: FileCreated => - if (e.attributes.bytes < 5_000_000_000L) { - fileCopier.copyFile(e.project, e.attributes) >> - files.registerFile(FileId(e.id, project), None, None, e.attributes.path, e.tag, e.attributes.mediaType) - } else IO.unit + val attrs = e.attributes + val customMetadata = Some(getCustomMetadata(attrs)) + IO.whenA(attrs.bytes < 5_000_000_000L) { + fileCopier.copyFile(e.project, attrs) >> + files.registerFile(fileId, None, customMetadata, attrs.path, e.tag, attrs.mediaType).void + } case e: FileUpdated => - if (e.attributes.bytes < 5_000_000_000L) { - fileCopier.copyFile(e.project, e.attributes) >> - // format: off - files.updateRegisteredFile(FileId(e.id, project), None, None, cRev, e.attributes.path, e.tag, e.attributes.mediaType) - // format: on - } else IO.unit + val attrs = e.attributes + val customMetadata = Some(getCustomMetadata(attrs)) + IO.whenA(attrs.bytes < 5_000_000_000L) { + fileCopier.copyFile(e.project, attrs) >> + files.updateRegisteredFile(fileId, None, customMetadata, cRev, attrs.path, e.tag, attrs.mediaType).void + } case e: FileCustomMetadataUpdated => - files.updateMetadata(FileId(e.id, project), cRev, e.metadata, e.tag) + files.updateMetadata(fileId, cRev, e.metadata, e.tag) case _: FileAttributesUpdated => IO.unit case e: FileTagAdded => - files.tag(FileId(e.id, project), e.tag, e.targetRev, cRev) + files.tag(fileId, e.tag, e.targetRev, cRev) case e: FileTagDeleted => - files.deleteTag(FileId(e.id, project), e.tag, cRev) - case e: FileDeprecated => - files.deprecate(FileId(e.id, project), cRev) - case e: FileUndeprecated => - files.undeprecate(FileId(e.id, project), cRev) + files.deleteTag(fileId, e.tag, cRev) + case _: FileDeprecated => + files.deprecate(fileId, cRev) + case _: FileUndeprecated => + files.undeprecate(fileId, cRev) } }.redeemWith( {