app/model/commands/PacFileUploadCommand.scala (36 lines of code) (raw):
package model.commands
import java.io.File
import com.amazonaws.services.s3.model.{ObjectMetadata, PutObjectRequest, PutObjectResult}
import com.gu.media.logging.Logging
import com.gu.media.model.{MediaAtom, PacFileMessage}
import com.gu.media.upload.PlutoUploadActions
import com.gu.media.util.MediaAtomHelpers
import data.DataStores
import com.gu.pandomainauth.model.{User => PandaUser}
import util.AWSConfig
import model.commands.CommandExceptions._
case class PacFileUploadCommand (
mediaAtom: MediaAtom,
file: File,
override val stores: DataStores,
user: PandaUser,
awsConfig: AWSConfig
) extends Command with Logging {
override type T = PacFileMessage
override def process(): PacFileMessage = {
val version = MediaAtomHelpers.getCurrentAssetVersion(mediaAtom).getOrElse(1)
val key = s"${awsConfig.userUploadFolder}/${mediaAtom.id}-$version/pac.xml"
val metadata = new ObjectMetadata
metadata.addUserMetadata("user", getUsername(user))
val request = new PutObjectRequest(awsConfig.userUploadBucket, key, file).withMetadata(metadata)
awsConfig.s3Client.putObject(request) match {
case _: PutObjectResult => {
val pacFileUpload = PacFileMessage.build(mediaAtom, request)
val plutoActions = new PlutoUploadActions(awsConfig)
plutoActions.sendToPluto(pacFileUpload)
pacFileUpload
}
case _ => PacFileUploadFailed
}
}
}