app/model/commands/DeleteCommand.scala (37 lines of code) (raw):

package model.commands import java.util.Date import com.gu.atom.play.AtomAPIActions import com.gu.contentatom.thrift.atom.media.PrivacyStatus import com.gu.contentatom.thrift.{ContentAtomEvent, EventType} import com.gu.media.logging.Logging import com.gu.media.model.{AdSettings, Asset, MediaAtom, VideoUpdateError} import data.DataStores import com.gu.media.model.Platform.Youtube import model.YouTubeMessage import util.YouTube case class DeleteCommand(id: String, override val stores: DataStores, youTube: YouTube) extends Command with Logging { type T = Unit override def process(): Unit = { val atom = getPreviewAtom(id) val mediaAtom = MediaAtom.fromThrift(atom) makeYouTubeVideosPrivate(mediaAtom.assets) val event = ContentAtomEvent(atom, EventType.Takedown, new Date().getTime) livePublisher.publishAtomEvent(event) previewPublisher.publishAtomEvent(event) deletePreviewAtom(id) deletePublishedAtom(id) } private def makeYouTubeVideosPrivate(assets: List[Asset]): Unit = assets.collect { case Asset(_, _, videoId, Youtube, _) if youTube.isManagedVideo(videoId) => val privacyStatusUpdate = youTube.setStatus(videoId, PrivacyStatus.Private) privacyStatusUpdate match { case Right(message: String) => YouTubeMessage(id, videoId, "Atom Deletion", message).logMessage() case Left(error: VideoUpdateError) => YouTubeMessage(id, videoId, "Atom Deletion", error.errorToLog, isError = true).logMessage() } youTube.createOrUpdateClaim(id, videoId, AdSettings.NONE) match { case Right(message: String) => YouTubeMessage(id, videoId, "Asset marked as private due to atom deletion", message).logMessage() case Left(error: VideoUpdateError) => YouTubeMessage(id, videoId, "Asset private due to atom Deletion", error.errorToLog, isError = true).logMessage() } } }