mirror of
https://github.com/dyrkin/luxmed-bot.git
synced 2025-12-21 13:23:05 +01:00
refactoring
This commit is contained in:
@@ -12,34 +12,28 @@ 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) = {
|
||||||
button match {
|
button match {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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] = {
|
||||||
|
|||||||
@@ -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,9 +22,8 @@ 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,
|
||||||
@@ -49,12 +47,10 @@ package object util {
|
|||||||
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,
|
||||||
@@ -65,13 +61,11 @@ package object util {
|
|||||||
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,
|
||||||
@@ -82,12 +76,10 @@ package object util {
|
|||||||
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,
|
||||||
@@ -98,13 +90,9 @@ package object util {
|
|||||||
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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user