Skip to content

Commit

Permalink
#110: fixing json protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
rawyler committed Sep 13, 2022
1 parent 1dd0ad8 commit 3dd70a1
Show file tree
Hide file tree
Showing 5 changed files with 378 additions and 374 deletions.
4 changes: 3 additions & 1 deletion .run/Openolitor.run.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Openolitor" type="Application" factoryName="Application">
<option name="ALTERNATIVE_JRE_PATH" value="latest" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<option name="MAIN_CLASS_NAME" value="ch.openolitor.core.Boot" />
<module name="main" />
<module name="openolitor-server" />
<method v="2">
<option name="Make" enabled="true" />
</method>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,17 +74,17 @@ trait ArbeitseinsatzJsonProtocol extends BaseJsonProtocol with LazyLogging with
fields("arbeitsangebotStatus").convertTo[ArbeitseinsatzStatus],
fields("zeitVon").convertTo[DateTime],
fields("zeitBis").convertTo[DateTime],
fields("einsatzZeit").convertTo[Option[BigDecimal]],
fields.get("einsatzZeit").fold(Option.empty[BigDecimal])(_.convertTo[Option[BigDecimal]]),
fields("kundeId").convertTo[KundeId],
fields("kundeBezeichnung").convertTo[String],
fields("aboId").convertTo[Option[AboId]],
fields("aboBezeichnung").convertTo[Option[String]],
fields("personId").convertTo[Option[PersonId]],
fields("personName").convertTo[Option[String]],
fields.get("aboId").fold(Option.empty[AboId])(_.convertTo[Option[AboId]]),
fields.get("aboBezeichnung").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("personId").fold(Option.empty[PersonId])(_.convertTo[Option[PersonId]]),
fields.get("personName").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("anzahlPersonen").convertTo[Int],
fields("bemerkungen").convertTo[Option[String]],
fields("email").convertTo[Option[String]],
fields("telefonMobil").convertTo[Option[String]],
fields.get("bemerkungen").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("email").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("telefonMobil").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("contactPermission").convertTo[Boolean],
fields("arbeitsangebot").convertTo[Arbeitsangebot],
fields("coworkers").convertTo[PersonContact],
Expand Down Expand Up @@ -135,17 +135,17 @@ trait ArbeitseinsatzJsonProtocol extends BaseJsonProtocol with LazyLogging with
fields("arbeitsangebotStatus").convertTo[ArbeitseinsatzStatus],
fields("zeitVon").convertTo[DateTime],
fields("zeitBis").convertTo[DateTime],
fields("einsatzZeit").convertTo[Option[BigDecimal]],
fields.get("einsatzZeit").fold(Option.empty[BigDecimal])(_.convertTo[Option[BigDecimal]]),
fields("kundeId").convertTo[KundeId],
fields("kundeBezeichnung").convertTo[String],
fields("aboId").convertTo[Option[AboId]],
fields("aboBezeichnung").convertTo[Option[String]],
fields("personId").convertTo[Option[PersonId]],
fields("personName").convertTo[Option[String]],
fields.get("aboId").fold(Option.empty[AboId])(_.convertTo[Option[AboId]]),
fields.get("aboBezeichnung").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("personId").fold(Option.empty[PersonId])(_.convertTo[Option[PersonId]]),
fields.get("personName").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("anzahlPersonen").convertTo[Int],
fields("bemerkungen").convertTo[Option[String]],
fields("email").convertTo[Option[String]],
fields("telefonMobil").convertTo[Option[String]],
fields.get("bemerkungen").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("email").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("telefonMobil").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("arbeitsangebot").convertTo[Arbeitsangebot],
fields("projekt").convertTo[ProjektReport],
fields("erstelldat").convertTo[DateTime],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,22 +69,22 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta
fields("titel").convertTo[String],
fields("waehrung").convertTo[Waehrung],
fields("betrag").convertTo[BigDecimal],
fields("einbezahlterBetrag").convertTo[Option[BigDecimal]],
fields.get("einbezahlterBetrag").fold(Option.empty[BigDecimal])(_.convertTo[Option[BigDecimal]]),
fields("rechnungsDatum").convertTo[DateTime],
fields("faelligkeitsDatum").convertTo[DateTime],
fields("eingangsDatum").convertTo[Option[DateTime]],
fields.get("eingangsDatum").fold(Option.empty[DateTime])(_.convertTo[Option[DateTime]]),
fields("status").convertTo[RechnungStatus],
fields("referenzNummer").convertTo[String],
fields("esrNummer").convertTo[String],
fields("fileStoreId").convertTo[Option[String]],
fields.get("fileStoreId").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("anzahlMahnungen").convertTo[Int],
fields("mahnungFileStoreIds").convertTo[Set[String]],
fields.get("mahnungFileStoreIds").fold(Set.empty[String])(_.convertTo[Set[String]]),
fields("strasse").convertTo[String],
fields("hausNummer").convertTo[Option[String]],
fields("adressZusatz").convertTo[Option[String]],
fields.get("hausNummer").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("adressZusatz").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("plz").convertTo[String],
fields("ort").convertTo[String],
fields("paymentType").convertTo[Option[PaymentType]],
fields.get("paymentType").fold(Option.empty[PaymentType])(_.convertTo[Option[PaymentType]]),
fields("erstelldat").convertTo[DateTime],
fields("ersteller").convertTo[PersonId],
fields("modifidat").convertTo[DateTime],
Expand Down Expand Up @@ -130,23 +130,23 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta
fields("titel").convertTo[String],
fields("waehrung").convertTo[Waehrung],
fields("betrag").convertTo[BigDecimal],
fields("rechnungsPositionen").convertTo[Seq[RechnungsPositionDetail]],
fields("einbezahlterBetrag").convertTo[Option[BigDecimal]],
fields.get("rechnungsPositionen").fold(Seq.empty[RechnungsPositionDetail])(_.convertTo[Seq[RechnungsPositionDetail]]),
fields.get("einbezahlterBetrag").fold(Option.empty[BigDecimal])(_.convertTo[Option[BigDecimal]]),
fields("rechnungsDatum").convertTo[DateTime],
fields("faelligkeitsDatum").convertTo[DateTime],
fields("eingangsDatum").convertTo[Option[DateTime]],
fields.get("eingangsDatum").fold(Option.empty[DateTime])(_.convertTo[Option[DateTime]]),
fields("status").convertTo[RechnungStatus],
fields("referenzNummer").convertTo[String],
fields("esrNummer").convertTo[String],
fields("fileStoreId").convertTo[Option[String]],
fields.get("fileStoreId").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("anzahlMahnungen").convertTo[Int],
fields("mahnungFileStoreIds").convertTo[Set[String]],
fields.get("mahnungFileStoreIds").fold(Set.empty[String])(_.convertTo[Set[String]]),
fields("strasse").convertTo[String],
fields("hausNummer").convertTo[Option[String]],
fields("adressZusatz").convertTo[Option[String]],
fields.get("hausNummer").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("adressZusatz").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("plz").convertTo[String],
fields("ort").convertTo[String],
fields("paymentType").convertTo[Option[PaymentType]],
fields.get("paymentType").fold(Option.empty[PaymentType])(_.convertTo[Option[PaymentType]]),
fields("erstelldat").convertTo[DateTime],
fields("ersteller").convertTo[PersonId],
fields("modifidat").convertTo[DateTime],
Expand Down Expand Up @@ -194,22 +194,22 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta
fields("titel").convertTo[String],
fields("waehrung").convertTo[Waehrung],
fields("betrag").convertTo[BigDecimal],
fields("rechnungsPositionen").convertTo[Seq[RechnungsPositionDetail]],
fields("einbezahlterBetrag").convertTo[Option[BigDecimal]],
fields.get("rechnungsPositionen").fold(Seq.empty[RechnungsPositionDetail])(_.convertTo[Seq[RechnungsPositionDetail]]),
fields.get("einbezahlterBetrag").fold(Option.empty[BigDecimal])(_.convertTo[Option[BigDecimal]]),
fields("rechnungsDatum").convertTo[DateTime],
fields("faelligkeitsDatum").convertTo[DateTime],
fields("eingangsDatum").convertTo[Option[DateTime]],
fields.get("eingangsDatum").fold(Option.empty[DateTime])(_.convertTo[Option[DateTime]]),
fields("status").convertTo[RechnungStatus],
fields("referenzNummer").convertTo[String],
fields("esrNummer").convertTo[String],
fields("anzahlMahnungen").convertTo[Int],
fields("strasse").convertTo[String],
fields("hausNummer").convertTo[Option[String]],
fields("adressZusatz").convertTo[Option[String]],
fields.get("hausNummer").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("adressZusatz").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("plz").convertTo[String],
fields("ort").convertTo[String],
fields("paymentType").convertTo[Option[PaymentType]],
fields("qrCode").convertTo[Option[String]],
fields.get("paymentType").fold(Option.empty[PaymentType])(_.convertTo[Option[PaymentType]]),
fields.get("qrCode").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("erstelldat").convertTo[DateTime],
fields("ersteller").convertTo[PersonId],
fields("modifidat").convertTo[DateTime],
Expand Down Expand Up @@ -276,22 +276,22 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta
ZahlungsEingang(
fields("id").convertTo[ZahlungsEingangId],
fields("zahlungsImportId").convertTo[ZahlungsImportId],
fields("rechnungId").convertTo[Option[RechnungId]],
fields("kundeBezeichnung").convertTo[Option[String]],
fields("kundeId").convertTo[Option[KundeId]],
fields.get("rechnungId").fold(Option.empty[RechnungId])(_.convertTo[Option[RechnungId]]),
fields.get("kundeBezeichnung").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("kundeId").fold(Option.empty[KundeId])(_.convertTo[Option[KundeId]]),
fields("transaktionsart").convertTo[String],
fields("teilnehmerNummer").convertTo[Option[String]],
fields("iban").convertTo[Option[String]],
fields.get("teilnehmerNummer").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields.get("iban").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("referenzNummer").convertTo[String],
fields("waehrung").convertTo[Waehrung],
fields("betrag").convertTo[BigDecimal],
fields("aufgabeDatum").convertTo[DateTime],
fields("verarbeitungsDatum").convertTo[DateTime],
fields("gutschriftsDatum").convertTo[DateTime],
fields("debitor").convertTo[Option[String]],
fields.get("debitor").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("status").convertTo[ZahlungsEingangStatus],
fields("erledigt").convertTo[Boolean],
fields("bemerkung").convertTo[Option[String]],
fields.get("bemerkung").fold(Option.empty[String])(_.convertTo[Option[String]]),
fields("erstelldat").convertTo[DateTime],
fields("ersteller").convertTo[PersonId],
fields("modifidat").convertTo[DateTime],
Expand Down
52 changes: 34 additions & 18 deletions src/main/scala/ch/openolitor/core/BaseJsonProtocol.scala
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import org.joda.time._
import org.joda.time.format._
import ch.openolitor.core.models._
import ch.openolitor.core.reporting.AsyncReportServiceResult
import ch.openolitor.stammdaten.models.{ PersonContactPermissionModify, SecondFactorType }
import ch.openolitor.stammdaten.models.{ EmailSecondFactorType, OtpSecondFactorType, PersonContactPermissionModify, SecondFactorType }

import java.util.UUID
import java.util.Locale
Expand All @@ -43,7 +43,7 @@ trait JSONSerializable extends Product
trait BaseJsonProtocol extends DefaultJsonProtocol {
val defaultConvert: Any => String = x => x.toString

implicit val uuidFormat = new RootJsonFormat[UUID] {
implicit val uuidFormat: JsonFormat[UUID] = new RootJsonFormat[UUID] {
def write(obj: UUID): JsValue = JsString(obj.toString)

def read(json: JsValue): UUID =
Expand All @@ -53,7 +53,7 @@ trait BaseJsonProtocol extends DefaultJsonProtocol {
}
}

implicit val localeFormat = new RootJsonFormat[Locale] {
implicit val localeFormat: JsonFormat[Locale] = new RootJsonFormat[Locale] {
def write(obj: Locale): JsValue = JsString(obj.toLanguageTag)

def read(json: JsValue): Locale =
Expand All @@ -63,7 +63,7 @@ trait BaseJsonProtocol extends DefaultJsonProtocol {
}
}

def enumFormat[E](implicit fromJson: String => E, toJson: E => String = defaultConvert) = new RootJsonFormat[E] {
def enumFormat[E](implicit fromJson: String => E, toJson: E => String = defaultConvert): RootJsonFormat[E] = new RootJsonFormat[E] {
def write(obj: E): JsValue = JsString(toJson(obj))

def read(json: JsValue): E =
Expand All @@ -73,7 +73,7 @@ trait BaseJsonProtocol extends DefaultJsonProtocol {
}
}

def baseIdFormat[I <: BaseId](implicit fromJson: Long => I) = new RootJsonFormat[I] {
def baseIdFormat[I <: BaseId](implicit fromJson: Long => I): RootJsonFormat[I] = new RootJsonFormat[I] {
def write(obj: I): JsValue = JsNumber(obj.id)

def read(json: JsValue): I =
Expand All @@ -86,7 +86,7 @@ trait BaseJsonProtocol extends DefaultJsonProtocol {
/*
* joda datetime format
*/
implicit val dateTimeFormat = new JsonFormat[DateTime] {
implicit val dateTimeFormat: JsonFormat[DateTime] = new JsonFormat[DateTime] {

val formatter = ISODateTimeFormat.dateTime

Expand All @@ -111,12 +111,12 @@ trait BaseJsonProtocol extends DefaultJsonProtocol {
}
}

implicit val optionDateTimeFormat = new OptionFormat[DateTime]
implicit val optionDateTimeFormat: JsonFormat[Option[DateTime]] = new OptionFormat[DateTime]

/*
* joda LocalDate format
*/
implicit val localDateFormat = new JsonFormat[LocalDate] {
implicit val localDateFormat: JsonFormat[LocalDate] = new JsonFormat[LocalDate] {

val formatter = ISODateTimeFormat.dateTime

Expand All @@ -141,22 +141,38 @@ trait BaseJsonProtocol extends DefaultJsonProtocol {
}
}

implicit val optionLocalDateFormat = new OptionFormat[LocalDate]
implicit val optionLocalDateFormat: JsonFormat[Option[LocalDate]] = new OptionFormat[LocalDate]

implicit val personIdFormat = baseIdFormat(PersonId.apply)
implicit val vorlageTypeFormat = enumFormat(VorlageTyp.apply)
implicit val secondFactorTypeFormat = enumFormat(SecondFactorType.apply)
implicit val personIdFormat: RootJsonFormat[PersonId] = baseIdFormat(PersonId.apply)
implicit val vorlageTypeFormat: RootJsonFormat[VorlageTyp] = enumFormat(VorlageTyp.apply)

implicit val idResponseFormat = jsonFormat1(BaseJsonProtocol.IdResponse)
implicit val secondFactorType: JsonFormat[SecondFactorType] = new JsonFormat[SecondFactorType] {
def write(obj: SecondFactorType): JsValue =
obj match {
case OtpSecondFactorType => JsString("otp")
case EmailSecondFactorType => JsString("email")
}

def read(json: JsValue): SecondFactorType =
json match {
case JsString("otp") => OtpSecondFactorType
case JsString("email") => EmailSecondFactorType
case pe => sys.error(s"Unknown secondfactor type:$pe")
}
}

implicit val optionalSecondFactorType: JsonFormat[Option[SecondFactorType]] = new OptionFormat[SecondFactorType]

implicit val idResponseFormat: RootJsonFormat[BaseJsonProtocol.IdResponse] = jsonFormat1(BaseJsonProtocol.IdResponse)

implicit val rejectionMessageFormat = jsonFormat2(RejectionMessage)
implicit val personContactPermissionModifyFormat = jsonFormat1(PersonContactPermissionModify)
implicit val rejectionMessageFormat: RootJsonFormat[RejectionMessage] = jsonFormat2(RejectionMessage)
implicit val personContactPermissionModifyFormat: RootJsonFormat[PersonContactPermissionModify] = jsonFormat1(PersonContactPermissionModify)

implicit val jobIdFormat = jsonFormat3(JobId)
implicit val asyncReportServiceResultFormat = jsonFormat2(AsyncReportServiceResult)
implicit val jobIdFormat: RootJsonFormat[JobId] = jsonFormat3(JobId)
implicit val asyncReportServiceResultFormat: RootJsonFormat[AsyncReportServiceResult] = jsonFormat2(AsyncReportServiceResult)

// event formats
implicit val eventMetadataFormat = jsonFormat6(EventMetadata)
implicit val eventMetadataFormat: RootJsonFormat[EventMetadata] = jsonFormat6(EventMetadata)
}

object BaseJsonProtocol {
Expand Down
Loading

0 comments on commit 3dd70a1

Please sign in to comment.