refactoring

This commit is contained in:
Eugene Zadyra
2019-04-17 00:36:35 +02:00
parent a8ee87fc70
commit daba98b2c3
4 changed files with 81 additions and 102 deletions

View File

@@ -12,33 +12,27 @@ package object telegram {
object TelegramModelConverters extends ModelConverters { object TelegramModelConverters extends ModelConverters {
implicit val TelegramCommandToCommandConverter: implicit val TelegramCommandToCommandConverter:
ObjectConverter[TelegramEvent, Command] = ObjectConverter[TelegramEvent, Command] =
new ObjectConverter[TelegramEvent, Command] { (data: TelegramEvent) => {
override def convert[Z <: TelegramEvent](data: Z): Command = { Command(
Command( source = MessageSource(TelegramMessageSourceSystem, data.msg.chat.id.toString),
source = MessageSource(TelegramMessageSourceSystem, data.msg.chat.id.toString), message = Message(data.msg.messageId.toString, data.msg.text),
message = Message(data.msg.messageId.toString, data.msg.text), callbackData = data.callbackData
callbackData = data.callbackData )
)
}
} }
implicit val TelegramMessageToMessageConverter: implicit val TelegramMessageToMessageConverter:
ObjectConverter[BMessage, Message] = ObjectConverter[BMessage, Message] =
new ObjectConverter[BMessage, Message] { (data: BMessage) => {
override def convert[Z <: BMessage](data: Z): Message = { Message(data.messageId.toString, data.text)
Message(data.messageId.toString, data.text)
}
} }
implicit val InlineKeyboardToInlineKeyboardMarkup: implicit val InlineKeyboardToInlineKeyboardMarkup:
ObjectConverter[InlineKeyboard, InlineKeyboardMarkup] = ObjectConverter[InlineKeyboard, InlineKeyboardMarkup] =
new ObjectConverter[InlineKeyboard, InlineKeyboardMarkup] { (inlineKeyboard: InlineKeyboard) => {
override def convert[Z <: InlineKeyboard](inlineKeyboard: Z): InlineKeyboardMarkup = { val buttons = inlineKeyboard.buttons.map { row =>
val buttons = inlineKeyboard.buttons.map { row => row.map(createInlineKeyboardButton)
row.map(createInlineKeyboardButton)
}
InlineKeyboardMarkup(buttons)
} }
InlineKeyboardMarkup(buttons)
} }
private def createInlineKeyboardButton(button: Button) = { private def createInlineKeyboardButton(button: Button) = {

View File

@@ -1,25 +1,22 @@
package com.lbs.common package com.lbs.common
import scala.collection.generic.CanBuildFrom
import scala.language.{higherKinds, implicitConversions} import scala.language.{higherKinds, implicitConversions}
trait ModelConverters { trait ModelConverters {
trait CollectionConverter[-In, Out] { trait ObjectConverter[-In, +Out] {
def convert[Z <: In, Col[X] <: Iterable[X]](col: Col[Z])(implicit bf: CanBuildFrom[Col[Z], Out, Col[Out]]): Col[Out] def convert(any: In): 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)
} }
implicit class ObjectOps[From](anyRef: From) { implicit class ObjectOps[From](anyRef: From) {
def mapTo[To](implicit converter: ObjectConverter[From, To]): To = converter.convert(anyRef) 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)
}
}
} }

View File

@@ -20,19 +20,19 @@ class DataService {
private[service] var dataRepository: DataRepository = _ private[service] var dataRepository: DataRepository = _
def getLatestCities(accountId: Long): Seq[IdName] = { 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] = { 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] = { 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] = { 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] = { def getCredentials(accountId: Long): Option[Credentials] = {

View File

@@ -12,7 +12,6 @@ import com.lbs.server.conversation.Book.BookingData
import com.lbs.server.conversation.Login.UserId import com.lbs.server.conversation.Login.UserId
import com.lbs.server.repository.model.{History, Monitoring} import com.lbs.server.repository.model.{History, Monitoring}
import scala.collection.generic.CanBuildFrom
import scala.language.{higherKinds, implicitConversions} import scala.language.{higherKinds, implicitConversions}
import scala.util.Try import scala.util.Try
@@ -23,88 +22,77 @@ package object util {
implicit val BookingDataToMonitoringConverter: implicit val BookingDataToMonitoringConverter:
ObjectConverter[(UserId, BookingData), Monitoring] = ObjectConverter[(UserId, BookingData), Monitoring] =
new ObjectConverter[(UserId, BookingData), Monitoring] { (data: (UserId, BookingData)) => {
override def convert[Z <: (UserId, BookingData)](data: Z): Monitoring = { val (userId, bookingData) = data
val (userId, bookingData) = data.asInstanceOf[(UserId, BookingData)] Monitoring(
Monitoring( userId = userId.userId,
userId = userId.userId, accountId = userId.accountId,
accountId = userId.accountId, chatId = userId.source.chatId,
chatId = userId.source.chatId, sourceSystemId = userId.source.sourceSystem.id,
sourceSystemId = userId.source.sourceSystem.id, payerId = bookingData.payerId,
payerId = bookingData.payerId, cityId = bookingData.cityId.id,
cityId = bookingData.cityId.id, cityName = bookingData.cityId.name,
cityName = bookingData.cityId.name, clinicId = bookingData.clinicId.optionalId,
clinicId = bookingData.clinicId.optionalId, clinicName = bookingData.clinicId.name,
clinicName = bookingData.clinicId.name, serviceId = bookingData.serviceId.id,
serviceId = bookingData.serviceId.id, serviceName = bookingData.serviceId.name,
serviceName = bookingData.serviceId.name, doctorId = bookingData.doctorId.optionalId,
doctorId = bookingData.doctorId.optionalId, doctorName = bookingData.doctorId.name,
doctorName = bookingData.doctorId.name, dateFrom = bookingData.dateFrom,
dateFrom = bookingData.dateFrom, dateTo = bookingData.dateTo,
dateTo = bookingData.dateTo, timeFrom = bookingData.timeFrom,
timeFrom = bookingData.timeFrom, timeTo = bookingData.timeTo,
timeTo = bookingData.timeTo, autobook = bookingData.autobook,
autobook = bookingData.autobook, rebookIfExists = bookingData.rebookIfExists,
rebookIfExists = bookingData.rebookIfExists, offset = bookingData.offset
offset = bookingData.offset )
)
}
} }
implicit val AvailableVisitsTermPresentationToTemporaryReservationRequestConverter: implicit val AvailableVisitsTermPresentationToTemporaryReservationRequestConverter:
ObjectConverter[AvailableVisitsTermPresentation, TemporaryReservationRequest] = ObjectConverter[AvailableVisitsTermPresentation, TemporaryReservationRequest] =
new ObjectConverter[AvailableVisitsTermPresentation, TemporaryReservationRequest] { (term: AvailableVisitsTermPresentation) => {
override def convert[Z <: AvailableVisitsTermPresentation](term: Z): TemporaryReservationRequest = { TemporaryReservationRequest(
TemporaryReservationRequest( clinicId = term.clinic.id,
clinicId = term.clinic.id, doctorId = term.doctor.id,
doctorId = term.doctor.id, payerDetailsList = term.payerDetailsList,
payerDetailsList = term.payerDetailsList, referralRequiredByService = term.referralRequiredByService,
referralRequiredByService = term.referralRequiredByService, roomId = term.roomId,
roomId = term.roomId, serviceId = term.serviceId,
serviceId = term.serviceId, startDateTime = term.visitDate.startDateTime
startDateTime = term.visitDate.startDateTime )
)
}
} }
implicit val TmpReservationIdWithValuationsToReservationRequestConverter: implicit val TmpReservationIdWithValuationsToReservationRequestConverter:
ObjectConverter[(Long, VisitTermVariant, AvailableVisitsTermPresentation), ReservationRequest] = ObjectConverter[(Long, VisitTermVariant, AvailableVisitsTermPresentation), ReservationRequest] =
new ObjectConverter[(Long, VisitTermVariant, AvailableVisitsTermPresentation), ReservationRequest] { (any: (Long, VisitTermVariant, AvailableVisitsTermPresentation)) => {
override def convert[Z <: (Long, VisitTermVariant, AvailableVisitsTermPresentation)](any: Z): ReservationRequest = { val (tmpReservationId, valuations, term) = any
val (tmpReservationId, valuations, term) = any.asInstanceOf[(Long, VisitTermVariant, AvailableVisitsTermPresentation)] ReservationRequest(
ReservationRequest( clinicId = term.clinic.id,
clinicId = term.clinic.id, doctorId = term.doctor.id,
doctorId = term.doctor.id, payerData = valuations.valuationDetail.payerData,
payerData = valuations.valuationDetail.payerData, roomId = term.roomId,
roomId = term.roomId, serviceId = term.serviceId,
serviceId = term.serviceId, startDateTime = term.visitDate.startDateTime,
startDateTime = term.visitDate.startDateTime, temporaryReservationId = tmpReservationId
temporaryReservationId = tmpReservationId )
)
}
} }
implicit val AvailableVisitsTermPresentationToValuationRequestConverter: implicit val AvailableVisitsTermPresentationToValuationRequestConverter:
ObjectConverter[AvailableVisitsTermPresentation, ValuationsRequest] = ObjectConverter[AvailableVisitsTermPresentation, ValuationsRequest] =
new ObjectConverter[AvailableVisitsTermPresentation, ValuationsRequest] { (term: AvailableVisitsTermPresentation) => {
override def convert[Z <: AvailableVisitsTermPresentation](term: Z): ValuationsRequest = { ValuationsRequest(
ValuationsRequest( clinicId = term.clinic.id,
clinicId = term.clinic.id, doctorId = term.doctor.id,
doctorId = term.doctor.id, payerDetailsList = term.payerDetailsList,
payerDetailsList = term.payerDetailsList, referralRequiredByService = term.referralRequiredByService,
referralRequiredByService = term.referralRequiredByService, roomId = term.roomId,
roomId = term.roomId, serviceId = term.serviceId,
serviceId = term.serviceId, startDateTime = term.visitDate.startDateTime
startDateTime = term.visitDate.startDateTime )
)
}
} }
implicit val HistoryToIdNameConverter: CollectionConverter[History, IdName] = new CollectionConverter[History, IdName] { implicit val HistoryToIdNameConverter: ObjectConverter[History, IdName] =
override def convert[Z <: History, Col[X] <: Iterable[X]](col: Col[Z])(implicit bf: CanBuildFrom[Col[Z], IdName, Col[IdName]]): Col[IdName] = { (history: History) => IdName(history.id, history.name)
col.map(history => IdName(history.id, history.name))(collection.breakOut)
}
}
} }
object MessageExtractors { object MessageExtractors {