diff --git a/src/main/scala/service/WebHookService.scala b/src/main/scala/service/WebHookService.scala index 92f1952..c55e6ac 100644 --- a/src/main/scala/service/WebHookService.scala +++ b/src/main/scala/service/WebHookService.scala @@ -36,19 +36,14 @@ } def callWebHook(eventName: String, webHookURLs: List[WebHook], payload: WebHookPayload): Unit = { - import org.json4s._ - import org.json4s.jackson.Serialization - import org.json4s.jackson.Serialization.{read, write} import org.apache.http.client.methods.HttpPost import org.apache.http.impl.client.HttpClientBuilder import scala.concurrent._ import ExecutionContext.Implicits.global - logger.debug("start callWebHook") - implicit val formats = Serialization.formats(NoTypeHints) - if(webHookURLs.nonEmpty){ - val json = write(payload) + implicit val formats = jsonFormats + val json = org.json4s.jackson.Serialization.write(payload) val httpClient = HttpClientBuilder.create.build webHookURLs.foreach { webHookUrl => @@ -151,6 +146,24 @@ object WebHookService { + val jsonFormats = { + import org.json4s._ + import org.json4s.jackson.Serialization + import scala.util.Try + import org.joda.time.format._ + import org.joda.time.DateTime + import org.joda.time.DateTimeZone + val parserISO = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'") + Serialization.formats(NoTypeHints) + new CustomSerializer[Date](format => + ( + { case JString(s) => Try(parserISO.parseDateTime(s)).toOption.map(_.toDate) + .getOrElse(throw new MappingException("Can't convert " + s + " to Date")) }, + { case x: Date => JString(parserISO.print(new DateTime(x).withZone(DateTimeZone.UTC))) } + ) + ) + } + + trait WebHookPayload // https://developer.github.com/v3/activity/events/types/#pushevent @@ -244,7 +257,7 @@ case class WebHookCommit( id: String, message: String, - timestamp: String, // "2014-10-09T17:10:36-07:00", + timestamp: Date, url: String, added: List[String], removed: List[String], @@ -259,7 +272,7 @@ WebHookCommit( id = commit.id, message = commit.fullMessage, - timestamp = commit.commitTime.toString, + timestamp = commit.commitTime, url = commitUrl, added = diffs._1.collect { case x if(x.changeType == DiffEntry.ChangeType.ADD) => x.newPath }, removed = diffs._1.collect { case x if(x.changeType == DiffEntry.ChangeType.DELETE) => x.oldPath }, @@ -297,6 +310,7 @@ // https://developer.github.com/v3/repos/ case class WebHookRepository( name: String, + full_name: String, url: String, description: String, watchers: Int, @@ -308,6 +322,7 @@ def apply(repositoryInfo: RepositoryInfo, owner: WebHookApiUser): WebHookRepository = WebHookRepository( name = repositoryInfo.name, + full_name = s"${repositoryInfo.owner}/${repositoryInfo.name}", url = repositoryInfo.httpUrl, description = repositoryInfo.repository.description.getOrElse(""), watchers = 0,