def createOrUpdate()

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