in app/services/S3.scala [107:133]
def createOrUpdate(data: String): S3Action[Unit] = { objectSettings =>
UIO.effectTotal {
val request = PutObjectRequest.builder
.bucket(objectSettings.bucket)
.key(objectSettings.key)
val requestModifiers: List[Option[PutObjectRequest.Builder => PutObjectRequest.Builder]] = List(
objectSettings.cacheControl.map(cc => _.cacheControl(cc)),
objectSettings.surrogateControl.map(sc => _.metadata(Map("surrogate-control" -> sc).asJava)),
if (objectSettings.publicRead) Some(_.acl(ObjectCannedACL.PUBLIC_READ)) else None
)
requestModifiers
.flatten
.foldLeft(request)((req, modifier) => modifier(req))
.build()
}.flatMap { request =>
effectBlocking {
s3Client.putObject(request, RequestBody.fromString(data))
}.unit
}
.mapError { e =>
logger.error(s"Error writing $objectSettings to S3: ${e.getMessage}", e)
S3PutObjectError(e)
}
}