app/model/PillarAudit.scala (45 lines of code) (raw):
package model
import com.amazonaws.services.dynamodbv2.document.Item
import org.joda.time.DateTime
import helpers.JodaDateTimeFormat._
import play.api.Logging
import play.api.libs.functional.syntax._
import play.api.libs.json.{Format, JsPath, Json}
import scala.util.control.NonFatal
case class PillarAudit(
pillarId: Long,
operation: String,
date: DateTime,
user: String,
description: String,
pillar: Pillar
) extends Audit {
override def auditType = "pillar"
override def resourceId = Some(pillarId.toString)
override def message = None
def toItem = Item.fromJSON(Json.toJson(this).toString())
}
object PillarAudit extends Logging {
implicit val pillarAuditFormat: Format[PillarAudit] = (
(JsPath \ "pillarId").format[Long] and
(JsPath \ "operation").format[String] and
(JsPath \ "date").format[DateTime] and
(JsPath \ "user").format[String] and
(JsPath \ "description").format[String] and
(JsPath \ "pillar").format[Pillar]
)(PillarAudit.apply, unlift(PillarAudit.unapply))
def fromItem(item: Item) = try {
Json.parse(item.toJSON).as[PillarAudit]
} catch {
case NonFatal(e) => {
logger.error(s"failed to load pillar Audit ${item.toJSON}", e)
throw e
}
}
def created(pillar: Pillar)(implicit user: Option[String]): PillarAudit = {
PillarAudit(pillar.id, "created", new DateTime(), user.getOrElse("unknown"), s"pillar '${pillar.name}' created", pillar)
}
def updated(pillar: Pillar)(implicit user: Option[String]): PillarAudit = {
PillarAudit(pillar.id, "updated", new DateTime(), user.getOrElse("unknown"), s"pillar '${pillar.name}' updated", pillar)
}
}