diff --git a/bot/src/main/scala/com/lbs/bot/telegram/package.scala b/bot/src/main/scala/com/lbs/bot/telegram/package.scala index 0cbd1a9..4e3a567 100644 --- a/bot/src/main/scala/com/lbs/bot/telegram/package.scala +++ b/bot/src/main/scala/com/lbs/bot/telegram/package.scala @@ -12,33 +12,27 @@ package object telegram { object TelegramModelConverters extends ModelConverters { implicit val TelegramCommandToCommandConverter: ObjectConverter[TelegramEvent, Command] = - new ObjectConverter[TelegramEvent, Command] { - override def convert[Z <: TelegramEvent](data: Z): Command = { - Command( - source = MessageSource(TelegramMessageSourceSystem, data.msg.chat.id.toString), - message = Message(data.msg.messageId.toString, data.msg.text), - callbackData = data.callbackData - ) - } + (data: TelegramEvent) => { + Command( + source = MessageSource(TelegramMessageSourceSystem, data.msg.chat.id.toString), + message = Message(data.msg.messageId.toString, data.msg.text), + callbackData = data.callbackData + ) } implicit val TelegramMessageToMessageConverter: ObjectConverter[BMessage, Message] = - new ObjectConverter[BMessage, Message] { - override def convert[Z <: BMessage](data: Z): Message = { - Message(data.messageId.toString, data.text) - } + (data: BMessage) => { + Message(data.messageId.toString, data.text) } implicit val InlineKeyboardToInlineKeyboardMarkup: ObjectConverter[InlineKeyboard, InlineKeyboardMarkup] = - new ObjectConverter[InlineKeyboard, InlineKeyboardMarkup] { - override def convert[Z <: InlineKeyboard](inlineKeyboard: Z): InlineKeyboardMarkup = { - val buttons = inlineKeyboard.buttons.map { row => - row.map(createInlineKeyboardButton) - } - InlineKeyboardMarkup(buttons) + (inlineKeyboard: InlineKeyboard) => { + val buttons = inlineKeyboard.buttons.map { row => + row.map(createInlineKeyboardButton) } + InlineKeyboardMarkup(buttons) } private def createInlineKeyboardButton(button: Button) = { diff --git a/common/src/main/scala/com/lbs/common/ModelConverters.scala b/common/src/main/scala/com/lbs/common/ModelConverters.scala index 2fa92c9..fc77692 100644 --- a/common/src/main/scala/com/lbs/common/ModelConverters.scala +++ b/common/src/main/scala/com/lbs/common/ModelConverters.scala @@ -1,25 +1,22 @@ package com.lbs.common -import scala.collection.generic.CanBuildFrom import scala.language.{higherKinds, implicitConversions} trait ModelConverters { - trait CollectionConverter[-In, Out] { - def convert[Z <: In, Col[X] <: Iterable[X]](col: Col[Z])(implicit bf: CanBuildFrom[Col[Z], Out, Col[Out]]): Col[Out] - } - - trait ObjectConverter[-In, Out] { - def convert[Z <: In](any: Z): Out - } - - implicit class CollectionOps[From, Col[X] <: Iterable[X]](col: Col[From]) { - def mapTo[To](implicit converter: CollectionConverter[From, To], bf: CanBuildFrom[Col[From], To, Col[To]]): Col[To] = converter.convert(col) + trait ObjectConverter[-In, +Out] { + def convert(any: In): Out } implicit class ObjectOps[From](anyRef: From) { def mapTo[To](implicit converter: ObjectConverter[From, To]): To = converter.convert(anyRef) } + implicit def sequenceConverters[From, To](implicit objectConverter: ObjectConverter[From, To]): ObjectConverter[Seq[From], Seq[To]] = { + collection: Seq[From] => { + collection.map(objectConverter.convert) + } + } + } diff --git a/server/src/main/scala/com/lbs/server/service/DataService.scala b/server/src/main/scala/com/lbs/server/service/DataService.scala index bb80f88..888c634 100644 --- a/server/src/main/scala/com/lbs/server/service/DataService.scala +++ b/server/src/main/scala/com/lbs/server/service/DataService.scala @@ -20,19 +20,19 @@ class DataService { private[service] var dataRepository: DataRepository = _ def getLatestCities(accountId: Long): Seq[IdName] = { - dataRepository.getCityHistory(accountId).mapTo[IdName] + dataRepository.getCityHistory(accountId).mapTo[Seq[IdName]] } def getLatestClinicsByCityId(userId: Long, cityId: Long): Seq[IdName] = { - dataRepository.getClinicHistory(userId, cityId).mapTo[IdName] + dataRepository.getClinicHistory(userId, cityId).mapTo[Seq[IdName]] } def getLatestServicesByCityIdAndClinicId(userId: Long, cityId: Long, clinicId: Option[Long]): Seq[IdName] = { - dataRepository.getServiceHistory(userId, cityId, clinicId).mapTo[IdName] + dataRepository.getServiceHistory(userId, cityId, clinicId).mapTo[Seq[IdName]] } def getLatestDoctorsByCityIdAndClinicIdAndServiceId(userId: Long, cityId: Long, clinicId: Option[Long], serviceId: Long): Seq[IdName] = { - dataRepository.getDoctorHistory(userId, cityId, clinicId, serviceId).mapTo[IdName] + dataRepository.getDoctorHistory(userId, cityId, clinicId, serviceId).mapTo[Seq[IdName]] } def getCredentials(accountId: Long): Option[Credentials] = { diff --git a/server/src/main/scala/com/lbs/server/util/package.scala b/server/src/main/scala/com/lbs/server/util/package.scala index 70f8a43..143ace6 100644 --- a/server/src/main/scala/com/lbs/server/util/package.scala +++ b/server/src/main/scala/com/lbs/server/util/package.scala @@ -12,7 +12,6 @@ import com.lbs.server.conversation.Book.BookingData import com.lbs.server.conversation.Login.UserId import com.lbs.server.repository.model.{History, Monitoring} -import scala.collection.generic.CanBuildFrom import scala.language.{higherKinds, implicitConversions} import scala.util.Try @@ -23,88 +22,77 @@ package object util { implicit val BookingDataToMonitoringConverter: ObjectConverter[(UserId, BookingData), Monitoring] = - new ObjectConverter[(UserId, BookingData), Monitoring] { - override def convert[Z <: (UserId, BookingData)](data: Z): Monitoring = { - val (userId, bookingData) = data.asInstanceOf[(UserId, BookingData)] - Monitoring( - userId = userId.userId, - accountId = userId.accountId, - chatId = userId.source.chatId, - sourceSystemId = userId.source.sourceSystem.id, - payerId = bookingData.payerId, - cityId = bookingData.cityId.id, - cityName = bookingData.cityId.name, - clinicId = bookingData.clinicId.optionalId, - clinicName = bookingData.clinicId.name, - serviceId = bookingData.serviceId.id, - serviceName = bookingData.serviceId.name, - doctorId = bookingData.doctorId.optionalId, - doctorName = bookingData.doctorId.name, - dateFrom = bookingData.dateFrom, - dateTo = bookingData.dateTo, - timeFrom = bookingData.timeFrom, - timeTo = bookingData.timeTo, - autobook = bookingData.autobook, - rebookIfExists = bookingData.rebookIfExists, - offset = bookingData.offset - ) - } + (data: (UserId, BookingData)) => { + val (userId, bookingData) = data + Monitoring( + userId = userId.userId, + accountId = userId.accountId, + chatId = userId.source.chatId, + sourceSystemId = userId.source.sourceSystem.id, + payerId = bookingData.payerId, + cityId = bookingData.cityId.id, + cityName = bookingData.cityId.name, + clinicId = bookingData.clinicId.optionalId, + clinicName = bookingData.clinicId.name, + serviceId = bookingData.serviceId.id, + serviceName = bookingData.serviceId.name, + doctorId = bookingData.doctorId.optionalId, + doctorName = bookingData.doctorId.name, + dateFrom = bookingData.dateFrom, + dateTo = bookingData.dateTo, + timeFrom = bookingData.timeFrom, + timeTo = bookingData.timeTo, + autobook = bookingData.autobook, + rebookIfExists = bookingData.rebookIfExists, + offset = bookingData.offset + ) } implicit val AvailableVisitsTermPresentationToTemporaryReservationRequestConverter: ObjectConverter[AvailableVisitsTermPresentation, TemporaryReservationRequest] = - new ObjectConverter[AvailableVisitsTermPresentation, TemporaryReservationRequest] { - override def convert[Z <: AvailableVisitsTermPresentation](term: Z): TemporaryReservationRequest = { - TemporaryReservationRequest( - clinicId = term.clinic.id, - doctorId = term.doctor.id, - payerDetailsList = term.payerDetailsList, - referralRequiredByService = term.referralRequiredByService, - roomId = term.roomId, - serviceId = term.serviceId, - startDateTime = term.visitDate.startDateTime - ) - } + (term: AvailableVisitsTermPresentation) => { + TemporaryReservationRequest( + clinicId = term.clinic.id, + doctorId = term.doctor.id, + payerDetailsList = term.payerDetailsList, + referralRequiredByService = term.referralRequiredByService, + roomId = term.roomId, + serviceId = term.serviceId, + startDateTime = term.visitDate.startDateTime + ) } implicit val TmpReservationIdWithValuationsToReservationRequestConverter: ObjectConverter[(Long, VisitTermVariant, AvailableVisitsTermPresentation), ReservationRequest] = - new ObjectConverter[(Long, VisitTermVariant, AvailableVisitsTermPresentation), ReservationRequest] { - override def convert[Z <: (Long, VisitTermVariant, AvailableVisitsTermPresentation)](any: Z): ReservationRequest = { - val (tmpReservationId, valuations, term) = any.asInstanceOf[(Long, VisitTermVariant, AvailableVisitsTermPresentation)] - ReservationRequest( - clinicId = term.clinic.id, - doctorId = term.doctor.id, - payerData = valuations.valuationDetail.payerData, - roomId = term.roomId, - serviceId = term.serviceId, - startDateTime = term.visitDate.startDateTime, - temporaryReservationId = tmpReservationId - ) - } + (any: (Long, VisitTermVariant, AvailableVisitsTermPresentation)) => { + val (tmpReservationId, valuations, term) = any + ReservationRequest( + clinicId = term.clinic.id, + doctorId = term.doctor.id, + payerData = valuations.valuationDetail.payerData, + roomId = term.roomId, + serviceId = term.serviceId, + startDateTime = term.visitDate.startDateTime, + temporaryReservationId = tmpReservationId + ) } implicit val AvailableVisitsTermPresentationToValuationRequestConverter: ObjectConverter[AvailableVisitsTermPresentation, ValuationsRequest] = - new ObjectConverter[AvailableVisitsTermPresentation, ValuationsRequest] { - override def convert[Z <: AvailableVisitsTermPresentation](term: Z): ValuationsRequest = { - ValuationsRequest( - clinicId = term.clinic.id, - doctorId = term.doctor.id, - payerDetailsList = term.payerDetailsList, - referralRequiredByService = term.referralRequiredByService, - roomId = term.roomId, - serviceId = term.serviceId, - startDateTime = term.visitDate.startDateTime - ) - } + (term: AvailableVisitsTermPresentation) => { + ValuationsRequest( + clinicId = term.clinic.id, + doctorId = term.doctor.id, + payerDetailsList = term.payerDetailsList, + referralRequiredByService = term.referralRequiredByService, + roomId = term.roomId, + serviceId = term.serviceId, + startDateTime = term.visitDate.startDateTime + ) } - implicit val HistoryToIdNameConverter: CollectionConverter[History, IdName] = new CollectionConverter[History, IdName] { - override def convert[Z <: History, Col[X] <: Iterable[X]](col: Col[Z])(implicit bf: CanBuildFrom[Col[Z], IdName, Col[IdName]]): Col[IdName] = { - col.map(history => IdName(history.id, history.name))(collection.breakOut) - } - } + implicit val HistoryToIdNameConverter: ObjectConverter[History, IdName] = + (history: History) => IdName(history.id, history.name) } object MessageExtractors {