app/story_packages/updates/UpdateMessage.scala (36 lines of code) (raw):

package story_packages.updates import com.gu.facia.client.models.{CollectionJson, TrailMetaData} import julienrf.json.derived import story_packages.model.StoryPackage import org.joda.time.DateTime import play.api.libs.json._ sealed trait UpdateMessage /* Config updates */ case class DeletePackage(id: String, isHidden: Boolean, name: String) extends UpdateMessage case class UpdateName(id: String, name: String) extends UpdateMessage case class CreatePackage(id: String, isHidden: Boolean, name: String) extends UpdateMessage /* Collection updates */ case class UpdateList( id: String, item: String, position: Option[String], after: Option[Boolean], itemMeta: Option[TrailMetaData] ) extends UpdateMessage object UpdateList { implicit val format: Format[UpdateList] = Json.format[UpdateList] } case class Update(update: UpdateList) extends UpdateMessage case class Remove(remove: UpdateList) extends UpdateMessage /* Macro - Watch out, this needs to be after the case classes */ object UpdateMessage { implicit val format: OFormat[UpdateMessage] = derived.flat.oformat[UpdateMessage]((__ \ "type").format[String]) } /* Kinesis messages */ case class AuditUpdate( update: UpdateMessage, email: String, collections: Map[String, CollectionJson], storyPackage: StoryPackage ) { val dateTime: DateTime = new DateTime() } object AuditUpdate { implicit val streamUpdateFormat: Format[AuditUpdate] = Json.format[AuditUpdate] }