diff --git a/core/shared/src/main/scala/works/iterative/core/FileRef.scala b/core/shared/src/main/scala/works/iterative/core/FileRef.scala index ff46a45..6d5a039 100644 --- a/core/shared/src/main/scala/works/iterative/core/FileRef.scala +++ b/core/shared/src/main/scala/works/iterative/core/FileRef.scala @@ -5,15 +5,22 @@ name: String, url: String, fileType: Option[String], - size: Option[String] -) + size: Option[Long] +): + def sizeString: Option[String] = + size.map { + case s if s < 1024 => s"$s B" + case s if s < 1024 * 1024 => s"${s / 1024} KB" + case s if s < 1024 * 1024 * 1024 => s"${s / (1024 * 1024)} MB" + case s => s"${s / (1024 * 1024 * 1024)} GB" + } object FileRef: def apply( name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): Validated[FileRef] = for name <- Validated.nonEmptyString("file.name")(name) @@ -24,5 +31,5 @@ name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): FileRef = new FileRef(name, url, fileType, size) diff --git a/core/shared/src/main/scala/works/iterative/core/FileRef.scala b/core/shared/src/main/scala/works/iterative/core/FileRef.scala index ff46a45..6d5a039 100644 --- a/core/shared/src/main/scala/works/iterative/core/FileRef.scala +++ b/core/shared/src/main/scala/works/iterative/core/FileRef.scala @@ -5,15 +5,22 @@ name: String, url: String, fileType: Option[String], - size: Option[String] -) + size: Option[Long] +): + def sizeString: Option[String] = + size.map { + case s if s < 1024 => s"$s B" + case s if s < 1024 * 1024 => s"${s / 1024} KB" + case s if s < 1024 * 1024 * 1024 => s"${s / (1024 * 1024)} MB" + case s => s"${s / (1024 * 1024 * 1024)} GB" + } object FileRef: def apply( name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): Validated[FileRef] = for name <- Validated.nonEmptyString("file.name")(name) @@ -24,5 +31,5 @@ name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): FileRef = new FileRef(name, url, fileType, size) diff --git a/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala b/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala index da934c1..10bdeb7 100644 --- a/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala +++ b/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala @@ -13,6 +13,7 @@ file: Array[Byte], contentType: Option[String] ): Op[FileRef] + def load(url: String): Op[Option[Array[Byte]]] object FileStore: type Op[A] = URIO[FileStore, A] @@ -24,3 +25,5 @@ contentType: Option[String] ): Op[FileRef] = ZIO.serviceWithZIO(_.store(name, file, contentType)) + def load(url: String): Op[Option[Array[Byte]]] = + ZIO.serviceWithZIO(_.load(url)) diff --git a/core/shared/src/main/scala/works/iterative/core/FileRef.scala b/core/shared/src/main/scala/works/iterative/core/FileRef.scala index ff46a45..6d5a039 100644 --- a/core/shared/src/main/scala/works/iterative/core/FileRef.scala +++ b/core/shared/src/main/scala/works/iterative/core/FileRef.scala @@ -5,15 +5,22 @@ name: String, url: String, fileType: Option[String], - size: Option[String] -) + size: Option[Long] +): + def sizeString: Option[String] = + size.map { + case s if s < 1024 => s"$s B" + case s if s < 1024 * 1024 => s"${s / 1024} KB" + case s if s < 1024 * 1024 * 1024 => s"${s / (1024 * 1024)} MB" + case s => s"${s / (1024 * 1024 * 1024)} GB" + } object FileRef: def apply( name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): Validated[FileRef] = for name <- Validated.nonEmptyString("file.name")(name) @@ -24,5 +31,5 @@ name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): FileRef = new FileRef(name, url, fileType, size) diff --git a/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala b/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala index da934c1..10bdeb7 100644 --- a/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala +++ b/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala @@ -13,6 +13,7 @@ file: Array[Byte], contentType: Option[String] ): Op[FileRef] + def load(url: String): Op[Option[Array[Byte]]] object FileStore: type Op[A] = URIO[FileStore, A] @@ -24,3 +25,5 @@ contentType: Option[String] ): Op[FileRef] = ZIO.serviceWithZIO(_.store(name, file, contentType)) + def load(url: String): Op[Option[Array[Byte]]] = + ZIO.serviceWithZIO(_.load(url)) diff --git a/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala b/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala index e1c8b28..66ad66b 100644 --- a/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala +++ b/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala @@ -16,4 +16,6 @@ contentType: Option[String] ): Op[FileRef] = ZIO.succeed(FileRef.unsafe(name, "#")) + override def load(url: String): Op[Option[Array[Byte]]] = + ZIO.succeed(None) } diff --git a/core/shared/src/main/scala/works/iterative/core/FileRef.scala b/core/shared/src/main/scala/works/iterative/core/FileRef.scala index ff46a45..6d5a039 100644 --- a/core/shared/src/main/scala/works/iterative/core/FileRef.scala +++ b/core/shared/src/main/scala/works/iterative/core/FileRef.scala @@ -5,15 +5,22 @@ name: String, url: String, fileType: Option[String], - size: Option[String] -) + size: Option[Long] +): + def sizeString: Option[String] = + size.map { + case s if s < 1024 => s"$s B" + case s if s < 1024 * 1024 => s"${s / 1024} KB" + case s if s < 1024 * 1024 * 1024 => s"${s / (1024 * 1024)} MB" + case s => s"${s / (1024 * 1024 * 1024)} GB" + } object FileRef: def apply( name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): Validated[FileRef] = for name <- Validated.nonEmptyString("file.name")(name) @@ -24,5 +31,5 @@ name: String, url: String, fileType: Option[String] = None, - size: Option[String] = None + size: Option[Long] = None ): FileRef = new FileRef(name, url, fileType, size) diff --git a/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala b/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala index da934c1..10bdeb7 100644 --- a/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala +++ b/core/shared/src/main/scala/works/iterative/core/service/FileStore.scala @@ -13,6 +13,7 @@ file: Array[Byte], contentType: Option[String] ): Op[FileRef] + def load(url: String): Op[Option[Array[Byte]]] object FileStore: type Op[A] = URIO[FileStore, A] @@ -24,3 +25,5 @@ contentType: Option[String] ): Op[FileRef] = ZIO.serviceWithZIO(_.store(name, file, contentType)) + def load(url: String): Op[Option[Array[Byte]]] = + ZIO.serviceWithZIO(_.load(url)) diff --git a/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala b/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala index e1c8b28..66ad66b 100644 --- a/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala +++ b/core/shared/src/main/scala/works/iterative/core/service/impl/InMemoryFileStore.scala @@ -16,4 +16,6 @@ contentType: Option[String] ): Op[FileRef] = ZIO.succeed(FileRef.unsafe(name, "#")) + override def load(url: String): Op[Option[Array[Byte]]] = + ZIO.succeed(None) } diff --git a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala index 90896ad..1ce1161 100644 --- a/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala +++ b/mongo/src/main/scala/works/iterative/mongo/MongoJsonRepository.scala @@ -88,7 +88,7 @@ toFilter: Criteria => Bson ): - def put(name: String, file: Array[Byte], metadata: Metadata): UIO[Unit] = + def put(name: String, file: Array[Byte], metadata: Metadata): UIO[String] = ZIO .fromFuture(_ => bucket @@ -99,7 +99,7 @@ ) .toFuture ) - .unit + .map(_.toString()) .orDie def find(id: String): UIO[Option[Array[Byte]]] =