fixed dateTime issue

This commit is contained in:
Eugene Zadyra
2022-07-11 09:40:41 +02:00
parent 36ada2874b
commit 19dee5b877
8 changed files with 36 additions and 19 deletions

View File

@@ -1,13 +1,14 @@
package com.lbs.api.json
import com.lbs.api.json.model.SerializableJsonObject
import com.lbs.api.json.model.{LuxmedFunnyDateTime, SerializableJsonObject}
import com.lbs.common.Logger
import org.json4s._
import org.json4s.jackson.JsonMethods._
import java.time.format.DateTimeFormatter
import java.time.{LocalDateTime, LocalTime, ZonedDateTime}
import scala.util.Try
object JsonSerializer extends Logger {
@@ -33,7 +34,19 @@ object JsonSerializer extends Logger {
}
))
private implicit val formats: Formats = DefaultFormats.withStrictArrayExtraction + zonedDateTimeSerializer + localTimeSerializer + localDateTimeSerializer
private val luxmedFunnyDateTimeSerializer = new CustomSerializer[LuxmedFunnyDateTime](_ => ( {
case JString(str) =>
Try(LocalDateTime.parse(str))
.map(v => LuxmedFunnyDateTime(dateTimeLocal = Some(v)))
.recoverWith{case _ => Try(ZonedDateTime.parse(str)).map(v => LuxmedFunnyDateTime(dateTimeTz = Some(v)))}
.getOrElse(sys.error(s"can't parse date $str"))
}, {
case time: LocalDateTime => JString(time.toString)
case time: ZonedDateTime => JString(time.toString)
}
))
private implicit val formats: Formats = DefaultFormats.withStrictArrayExtraction + zonedDateTimeSerializer + localTimeSerializer + localDateTimeSerializer + luxmedFunnyDateTimeSerializer
def extract[T](jsonString: String)(implicit mf: scala.reflect.Manifest[T]): T = {
parse(jsonString).camelizeKeys.extract[T]

View File

@@ -1,7 +1,7 @@
package com.lbs.api.json.model
import java.time.LocalDateTime
import java.time.{LocalDateTime, ZonedDateTime}
/**
*
@@ -28,7 +28,7 @@ import java.time.LocalDateTime
*"clinicGroup": "ul. Fabryczna 6",
*"clinicGroupId": 11,
*"clinicId": 2222,
*"dateTimeFrom": "2021-05-21T18:45:00",
*"dateTimeFrom": "2021-05-21T18:45:00", or 2021-05-21T18:45:00+02:00 sometimes!!!!
*"dateTimeTo": "2021-05-21T19:00:00",
*"doctor": {
*"academicTitle": "lek. med.",
@@ -126,9 +126,13 @@ case class AdditionalData(isPreparationRequired: Boolean, preparationItems: List
case class TermsForDay(day: LocalDateTime, terms: List[Term]) extends SerializableJsonObject
case class Term(clinic: String, clinicId: Long, dateTimeFrom: LocalDateTime, dateTimeTo: LocalDateTime, doctor: Doctor,
case class Term(clinic: String, clinicId: Long, dateTimeFrom: LuxmedFunnyDateTime, dateTimeTo: LuxmedFunnyDateTime, doctor: Doctor,
impedimentText: String, isAdditional: Boolean, isImpediment: Boolean, isTelemedicine: Boolean, roomId: Long,
scheduleId: Long, serviceId: Long) extends SerializableJsonObject
case class TermExt(additionalData: AdditionalData, term: Term) extends SerializableJsonObject
case class LuxmedFunnyDateTime(dateTimeTz: Option[ZonedDateTime] = None, dateTimeLocal: Option[LocalDateTime] = None) {
def get: LocalDateTime = dateTimeLocal.getOrElse(dateTimeTz.map(_.toLocalDateTime).get)
}

View File

@@ -262,7 +262,7 @@ object En extends Lang {
|${capitalizeFirstLetter(service)}: ${monitoring.serviceName}
|${capitalizeFirstLetter(clinic)}: ${term.term.clinic}
|${capitalizeFirstLetter(city)}: ${monitoring.cityName}
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom)}
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom.get)}
|
|""".stripMargin

View File

@@ -262,7 +262,7 @@ object Pl extends Lang {
|${capitalizeFirstLetter(service)}: ${monitoring.serviceName}
|${capitalizeFirstLetter(clinic)}: ${term.term.clinic}
|${capitalizeFirstLetter(city)}: ${monitoring.cityName}
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom)}
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom.get)}
|
|""".stripMargin

View File

@@ -261,7 +261,7 @@ object Ua extends Lang {
|${capitalizeFirstLetter(service)}: ${monitoring.serviceName}
|${capitalizeFirstLetter(clinic)}: ${term.term.clinic}
|${capitalizeFirstLetter(city)}: ${monitoring.cityName}
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom)}
|/reserve_${monitoring.recordId}_${term.term.scheduleId}_${minutesSinceBeginOf2018(term.term.dateTimeFrom.get)}
|
|""".stripMargin

View File

@@ -56,8 +56,8 @@ class ApiService extends SessionSupport {
)
termsEither.map { terms =>
terms.filter { term =>
val time = term.term.dateTimeFrom.toLocalTime
val date = term.term.dateTimeFrom
val time = term.term.dateTimeFrom.get.toLocalTime
val date = term.term.dateTimeFrom.get
(doctorId.isEmpty || doctorId.contains(term.term.doctor.id)) &&
(clinicId.isEmpty || clinicId.contains(term.term.clinicId)) &&
(time == timeFrom || time == timeTo || (time.isAfter(timeFrom) && time.isBefore(timeTo))) &&

View File

@@ -221,7 +221,7 @@ class MonitoringService extends Logger {
monitoring.doctorId, monitoring.dateFrom.toLocalDateTime, monitoring.dateTo.toLocalDateTime, timeFrom = monitoring.timeFrom, timeTo = monitoring.timeTo)
termsEither match {
case Right(terms) =>
val termMaybe = terms.find(term => term.term.scheduleId == scheduleId && minutesSinceBeginOf2018(term.term.dateTimeFrom) == time)
val termMaybe = terms.find(term => term.term.scheduleId == scheduleId && minutesSinceBeginOf2018(term.term.dateTimeFrom.get) == time)
termMaybe match {
case Some(term) =>
bookAppointment(term, monitoring, rebookIfExists = true)

View File

@@ -53,14 +53,14 @@ package object util {
val (reservationLocktermResponse, termExt) = data
val term = termExt.term
ReservationConfirmRequest(
date = term.dateTimeFrom.minusHours(2).toString + ":00.000Z",
date = term.dateTimeFrom.get.minusHours(2).toString + ":00.000Z",
doctorId = term.doctor.id,
facilityId = term.clinicId,
roomId = term.roomId,
scheduleId = term.scheduleId,
serviceVariantId = term.serviceId,
temporaryReservationId = reservationLocktermResponse.value.temporaryReservationId,
timeFrom = term.dateTimeFrom.toLocalTime,
timeFrom = term.dateTimeFrom.get.toLocalTime,
valuation = reservationLocktermResponse.value.valuations.head
)
}
@@ -74,7 +74,7 @@ package object util {
ReservationChangetermRequest(
existingReservationId = existingReservationId,
term = NewTerm(
date = term.dateTimeFrom.minusHours(2).toString + ":00.000Z",
date = term.dateTimeFrom.get.minusHours(2).toString + ":00.000Z",
doctorId = term.doctor.id,
facilityId = term.clinicId,
parentReservationId = existingReservationId,
@@ -83,7 +83,7 @@ package object util {
scheduleId = term.scheduleId,
serviceVariantId = term.serviceId,
temporaryReservationId = reservationLocktermResponse.value.temporaryReservationId,
timeFrom = term.dateTimeFrom.toLocalTime,
timeFrom = term.dateTimeFrom.get.toLocalTime,
valuation = reservationLocktermResponse.value.valuations.head
)
)
@@ -95,7 +95,7 @@ package object util {
val term = termExt.term
val additionalData = termExt.additionalData
ReservationLocktermRequest(
date = term.dateTimeFrom.minusHours(2).toString + ":00.000Z",
date = term.dateTimeFrom.get.minusHours(2).toString + ":00.000Z",
doctor = term.doctor,
doctorId = term.doctor.id,
facilityId = term.clinicId,
@@ -108,8 +108,8 @@ package object util {
roomId = term.roomId,
scheduleId = term.scheduleId,
serviceVariantId = term.serviceId,
timeFrom = term.dateTimeFrom.toLocalTime.toString,
timeTo = term.dateTimeTo.toLocalTime.toString
timeFrom = term.dateTimeFrom.get.toLocalTime.toString,
timeTo = term.dateTimeTo.get.toLocalTime.toString
)
}
@@ -167,7 +167,7 @@ package object util {
def formatDateTime(date: ZonedDateTime, locale: Locale): String = date.format(DateTimeFormat(locale))
def formatDateTime(date: LocalDateTime, locale: Locale): String = date.format(DateTimeFormat(locale))
def formatDateTime(date: LuxmedFunnyDateTime, locale: Locale): String = date.get.format(DateTimeFormat(locale))
private val EpochMinutesTillBeginOf2022: Long = epochMinutes(LocalDateTime.of(2022, 1, 1, 0, 0, 0, 0))