#10 Implemented offset functionality

This commit is contained in:
Eugene Zadyra
2018-12-12 20:58:49 +01:00
parent 2777f15e00
commit 9e88723f82
7 changed files with 57 additions and 22 deletions

View File

@@ -7,12 +7,12 @@ databaseChangeLog:
tableName: monitoring
columns:
- column:
name: offset
name: time_offset
type: int
defaultValue: 0
- addNotNullConstraint:
tableName: monitoring
columnName: offset
columnName: time_offset
columnDataType: int
defaultNullValue: 0

View File

@@ -19,6 +19,6 @@ databaseChangeLog:
- addNotNullConstraint:
tableName: monitoring
columnName: offset
columnDataType: int
defaultNullValue: 0
columnName: rebook_if_exists
columnDataType: boolean
defaultNullValue: false

View File

@@ -9,7 +9,7 @@ import com.lbs.server.conversation.Settings._
import com.lbs.server.conversation.base.Conversation
import com.lbs.server.lang.{Lang, Localizable, Localization}
import com.lbs.server.service.DataService
import com.lbs.server.util.MessageExtractors.{CallbackCommand, IntString}
import com.lbs.server.util.MessageExtractors.{CallbackCommand, IntString, TextCommand}
import com.lbs.server.repository.model
class Settings(val userId: UserId, bot: Bot, dataService: DataService, val localization: Localization)(val actorSystem: ActorSystem) extends Conversation[Unit] with Localizable {
@@ -41,23 +41,40 @@ class Settings(val userId: UserId, bot: Bot, dataService: DataService, val local
def showOffsetOptions: Step = {
ask { _ =>
val settingsMaybe = dataService.findSettings(userId.userId)
val (defaultOffset, askOffset) = settingsMaybe match {
case Some(settings) => (settings.defaultOffset, settings.alwaysAskOffset)
case None => (0, false)
}
val settings = getSettings
bot.sendMessage(userId.source, lang.configureOffset,
inlineKeyboard = createInlineKeyboard(Seq(Button(s"${if(askOffset) "✅" else " "} Always ask offset", Tags.AskOffset)), columns = 1))
inlineKeyboard = createInlineKeyboard(Seq(Button(lang.alwaysAskOffset(settings.alwaysAskOffset), Tags.AlwaysAskOffset),
Button(lang.changeDefaultOffset(settings.defaultOffset), Tags.ChangeDefaultOffset)), columns = 1))
} onReply {
case Msg(cmd@CallbackCommand(Tags.AskOffset), _) =>
val settings = dataService.findSettings(userId.userId).getOrElse(model.Settings(userId.userId, lang.id, 0, alwaysAskOffset = false))
case Msg(cmd@CallbackCommand(Tags.AlwaysAskOffset), _) =>
val settings = getSettings
settings.alwaysAskOffset = !settings.alwaysAskOffset
dataService.saveSettings(settings)
bot.sendEditMessage(userId.source, cmd.message.messageId,
inlineKeyboard = createInlineKeyboard(Seq(Button(s"${if(settings.alwaysAskOffset) "✅" else " "} Always ask offset", Tags.AskOffset)), columns = 1))
inlineKeyboard = createInlineKeyboard(Seq(Button(lang.alwaysAskOffset(settings.alwaysAskOffset), Tags.AlwaysAskOffset),
Button(lang.changeDefaultOffset(settings.defaultOffset), Tags.ChangeDefaultOffset)), columns = 1))
stay()
case Msg(CallbackCommand(Tags.ChangeDefaultOffset), _) =>
goto(askDefaultOffset)
}
}
def askDefaultOffset: Step = {
ask { _ =>
val settings = getSettings
bot.sendMessage(userId.source, lang.pleaseEnterOffset(settings.defaultOffset))
} onReply {
case Msg(TextCommand(IntString(offset)), _) =>
val settings = getSettings
settings.defaultOffset = offset
dataService.saveSettings(settings)
goto(showOffsetOptions)
}
}
private def getSettings = {
dataService.findSettings(userId.userId).getOrElse(model.Settings(userId.userId, lang.id, 0, alwaysAskOffset = false))
}
}
object Settings {
@@ -65,7 +82,8 @@ object Settings {
object Tags {
val Language = "language"
val Offset = "offset"
val AskOffset = "ask_offset"
val AlwaysAskOffset = "always_ask_offset"
val ChangeDefaultOffset = "change_default_offset"
}
}

View File

@@ -172,7 +172,7 @@ object En extends Lang {
|With its help you can book a visit to the doctor, create term monitorings, view upcoming visits and visit history.
|
|Ping @dyrkin_me if you have any questions.
|<b>Github</b>: https://github.com/dyrkin/luxmed-bot
|<a href='https://github.com/dyrkin/luxmed-bot'>Clone</a>
|
|<b>➡</b> Supported commands
|/book - reserve a visit or create monitoring
@@ -305,7 +305,7 @@ object En extends Lang {
override def settingsHeader: String = "<b>➡</b> Please choose an action"
override def language: String = "🌐 Change language"
override def language: String = "🌐 Language"
override def offset: String = "⏱ Offset"
@@ -313,6 +313,12 @@ object En extends Lang {
override def configureOffset: String = "<b>➡</b> Please specify offset options"
override def pleaseEnterOffset(current: Int): String = s"<b>➡</b> Please enter default offset. Current: <b>$current</b>"
override def alwaysAskOffset(enabled: Boolean): String = s"${if (enabled) "✅ " else ""}Always ask offset"
override def changeDefaultOffset(current: Int): String = s"Change default offset ($current)"
override def languageUpdated: String = "👍 Language was successfully changed!"
override def appointmentWasNotCancelled: String = "👍 Appointment was not cancelled"

View File

@@ -200,6 +200,12 @@ trait Lang {
def configureOffset: String
def pleaseEnterOffset(current: Int): String
def alwaysAskOffset(enabled: Boolean): String
def changeDefaultOffset(current: Int): String
def languageUpdated: String
def appointmentWasNotCancelled: String

View File

@@ -171,7 +171,7 @@ object Ua extends Lang {
|Завдяки йому ви можете зарезервувати візит до лікаря, створити моніторинг доступних термінів, переглянути історію та майбутні візити.
|
|Пінгани @dyrkin_me у разі питань.
|<b>Github</b>: https://github.com/dyrkin/luxmed-bot
|<a href='https://github.com/dyrkin/luxmed-bot'>Клонувати</a>
|
|<b>➡</b> Підтримувані команди
|/book - зарезервувати візит або створити моніторинг
@@ -304,7 +304,7 @@ object Ua extends Lang {
override def settingsHeader: String = "<b>➡</b> Оберіть дію"
override def language: String = "🌐 Змінити мову"
override def language: String = "🌐 Мова"
override def offset: String = "⏱ Зміщення"
@@ -312,6 +312,12 @@ object Ua extends Lang {
override def configureOffset: String = "<b>➡</b> Будь ласка, сконфігуруйте зміщення"
override def pleaseEnterOffset(current: Int): String = s"<b>➡</b> Будь ласка, введіть зміщення за замовчуванням. Поточне: <b>$current</b>"
override def alwaysAskOffset(enabled: Boolean): String = s"${if(enabled) "✅ " else ""}Завжди питати зміщення"
override def changeDefaultOffset(current: Int): String = s"Змінити дефолтне зміщення ($current)"
override def languageUpdated: String = "👍 Мову успішно змінено!"
override def appointmentWasNotCancelled: String = "👍 Візит не було скасовано"

View File

@@ -90,9 +90,8 @@ class Monitoring extends RecordId {
@Column(nullable = false)
var active: Boolean = true
@BeanProperty
@Column(nullable = false)
@Column(name = "time_offset",nullable = false)
var offset: Int = 0
}