package xyz.driver.pdsuidomain.formats.json.userhistory import java.time.{ZoneId, ZonedDateTime} import play.api.libs.functional.syntax._ import play.api.libs.json.{Format, JsPath} import xyz.driver.pdsuidomain.entities.UserHistory final case class ApiUserHistory(id: Long, executor: String, recordId: Option[Long], documentId: Option[Long], trialId: Option[String], patientId: Option[String], state: String, action: String, created: ZonedDateTime) object ApiUserHistory { implicit val format: Format[ApiUserHistory] = ( (JsPath \ "id").format[Long] and (JsPath \ "executor").format[String] and (JsPath \ "recordId").formatNullable[Long] and (JsPath \ "documentId").formatNullable[Long] and (JsPath \ "trialId").formatNullable[String] and (JsPath \ "patientId").formatNullable[String] and (JsPath \ "state").format[String] and (JsPath \ "action").format[String] and (JsPath \ "created").format[ZonedDateTime] )(ApiUserHistory.apply, unlift(ApiUserHistory.unapply)) def fromDomain(x: UserHistory) = ApiUserHistory( id = x.id.id, executor = x.executor.id, recordId = x.recordId.map(_.id), documentId = x.documentId.map(_.id), trialId = x.trialId.map(_.id), patientId = x.patientId.map(_.id.toString), state = UserHistory.State.stateToString(x.state), action = UserHistory.Action.actionToString(x.action), created = ZonedDateTime.of(x.created, ZoneId.of("Z")) ) }