app/story_packages/updates/AuditingUpdates.scala (48 lines of code) (raw):
package story_packages.updates
import net.logstash.logback.marker.Markers
import play.api.libs.json.Json
import conf.ApplicationConfiguration
import story_packages.services.Logging
import scala.jdk.CollectionConverters._
class AuditingUpdates(config: ApplicationConfiguration) extends Logging {
def putAudit(audit: AuditUpdate): Unit = {
lazy val updatePayload = serializeUpdateMessage(audit)
lazy val shortMessagePayload = serializeShortMessage(audit)
audit.storyPackage.id.foreach { packageId =>
Logger.logger.info(createMarkers(audit, shortMessagePayload, updatePayload, packageId), "Story Packages Audit")
}
}
private def createMarkers(audit: AuditUpdate, shortMessage: Option[String], message: Option[String], packageId: String) =
Markers.appendEntries((
Map(
"operation" -> audit.update.getClass.getSimpleName,
"userEmail" -> audit.email,
"date" -> audit.dateTime.toString,
"resourceId" -> packageId
)
++ shortMessage.map("shortMessage" -> _)
++ message.map("message" -> _)
).asJava
)
private def serializeShortMessage(audit: AuditUpdate): Option[String] = {
audit.update match {
case update: CreatePackage => Some(Json.toJson(Json.obj(
"isHidden" -> update.isHidden,
"name" -> update.name,
"email" -> audit.email
)).toString)
case update: DeletePackage => Some(Json.toJson(Json.obj(
"name" -> update.name,
"isHidden" -> update.isHidden,
"email" -> audit.email
)).toString)
case update: UpdateName => Some(Json.toJson(Json.obj(
"name" -> update.name
)).toString)
case _ => None
}
}
private def serializeUpdateMessage(streamUpdate: AuditUpdate): Option[String] = {
Some(Json.toJson(streamUpdate.update).toString())
}
}