diff --git a/server/src/main/resources/db/changelog/06-add-username-to-monitoring.yml b/server/src/main/resources/db/changelog/06-add-username-to-monitoring.yml
new file mode 100644
index 0000000..ef2293e
--- /dev/null
+++ b/server/src/main/resources/db/changelog/06-add-username-to-monitoring.yml
@@ -0,0 +1,23 @@
+databaseChangeLog:
+ - changeSet:
+ id: 06
+ author: dyrkin
+ preConditions:
+ onFail: MARK_RAN
+ not:
+ columnExists:
+ tableName: monitoring
+ columnName: username
+ changes:
+ - addColumn:
+ tableName: monitoring
+ columns:
+ - column:
+ name: username
+ type: VARCHAR(255)
+
+ - addNotNullConstraint:
+ tableName: monitoring
+ columnName: username
+ columnDataType: VARCHAR(255)
+ defaultNullValue: "you"
diff --git a/server/src/main/resources/db/liquibase-changelog.yml b/server/src/main/resources/db/liquibase-changelog.yml
index 26bbea4..f6bff2b 100644
--- a/server/src/main/resources/db/liquibase-changelog.yml
+++ b/server/src/main/resources/db/liquibase-changelog.yml
@@ -16,4 +16,7 @@ databaseChangeLog:
relativeToChangelogFile: true
- include:
file: changelog/05-drop-bugs-table.yml
- relativeToChangelogFile: true
\ No newline at end of file
+ relativeToChangelogFile: true
+- include:
+ file: changelog/06-add-username-to-monitoring.yml
+ relativeToChangelogFile: true
\ No newline at end of file
diff --git a/server/src/main/scala/com/lbs/server/conversation/Account.scala b/server/src/main/scala/com/lbs/server/conversation/Account.scala
index 5e02e8f..10460b9 100644
--- a/server/src/main/scala/com/lbs/server/conversation/Account.scala
+++ b/server/src/main/scala/com/lbs/server/conversation/Account.scala
@@ -51,7 +51,7 @@ class Account(val userId: UserId, bot: Bot, dataService: DataService, val locali
userMaybe.foreach { user =>
user.activeAccountId = accountId
dataService.saveUser(user)
- router ! SwitchAccount(UserId(account.userId, account.accountId, userId.source))
+ router ! SwitchAccount(UserId(account.userId, account.username, account.accountId, userId.source))
bot.sendMessage(userId.source, lang.accountSwitched(account.username))
}
case None =>
diff --git a/server/src/main/scala/com/lbs/server/conversation/Auth.scala b/server/src/main/scala/com/lbs/server/conversation/Auth.scala
index 1b4dff6..f58912a 100644
--- a/server/src/main/scala/com/lbs/server/conversation/Auth.scala
+++ b/server/src/main/scala/com/lbs/server/conversation/Auth.scala
@@ -46,8 +46,8 @@ class Auth(
chat = getChat(userId.get)
chat ! cmd
stay()
- case Msg(LoggedIn(forwardCommand, uId, aId), _) =>
- val id = UserId(uId, aId, source)
+ case Msg(LoggedIn(forwardCommand, uId, username, aId), _) =>
+ val id = UserId(uId, username, aId, source)
val cmd = forwardCommand.cmd
userId = Some(id)
chat = getChat(id, reInit = true)
@@ -72,7 +72,7 @@ class Auth(
def getUserId: Option[UserId] = {
val userIdMaybe = dataService.findUserAndAccountIdBySource(source)
- userIdMaybe.map { case (uId, aId) => UserId(uId, aId, source) }
+ userIdMaybe.map { case (uId, username, aId) => UserId(uId, username, aId, source) }
}
beforeDestroy {
diff --git a/server/src/main/scala/com/lbs/server/conversation/Login.scala b/server/src/main/scala/com/lbs/server/conversation/Login.scala
index 05b8c34..9345365 100644
--- a/server/src/main/scala/com/lbs/server/conversation/Login.scala
+++ b/server/src/main/scala/com/lbs/server/conversation/Login.scala
@@ -52,10 +52,10 @@ class Login(
goto(requestUsername)
case Right(session) =>
val credentials = dataService.saveCredentials(source, username, password)
- userId = UserId(credentials.userId, credentials.accountId, source)
+ userId = UserId(credentials.userId, credentials.username, credentials.accountId, source)
apiService.addSession(credentials.accountId, session)
bot.sendMessage(source, lang.loginAndPasswordAreOk)
- originator ! LoggedIn(forwardCommand, credentials.userId, credentials.accountId)
+ originator ! LoggedIn(forwardCommand, credentials.userId, credentials.username, credentials.accountId)
end()
}
}
@@ -65,8 +65,8 @@ object Login {
case class ForwardCommand(cmd: Command)
- case class UserId(userId: Long, accountId: Long, source: MessageSource)
+ case class UserId(userId: Long, username: String, accountId: Long, source: MessageSource)
- case class LoggedIn(forwardCommand: ForwardCommand, userId: Long, accountId: Long)
+ case class LoggedIn(forwardCommand: ForwardCommand, userId: Long, username: String, accountId: Long)
}
diff --git a/server/src/main/scala/com/lbs/server/lang/En.scala b/server/src/main/scala/com/lbs/server/lang/En.scala
index 27f3484..5333a55 100644
--- a/server/src/main/scala/com/lbs/server/lang/En.scala
+++ b/server/src/main/scala/com/lbs/server/lang/En.scala
@@ -300,7 +300,7 @@ object En extends Lang {
|➡ Create new monitoring /book""".stripMargin
override def appointmentIsBooked(term: TermExt, monitoring: Monitoring): String =
- s"""👍 We just booked an appointment for you!
+ s"""👍 We just booked an appointment for ${monitoring.username}!
|
|⏱ ${formatDateTime(term.term.dateTimeFrom, locale)}
|${capitalize(doctor)}: ${term.term.doctor.firstName} ${term.term.doctor.lastName}
diff --git a/server/src/main/scala/com/lbs/server/lang/Pl.scala b/server/src/main/scala/com/lbs/server/lang/Pl.scala
index a072d9d..1804bae 100644
--- a/server/src/main/scala/com/lbs/server/lang/Pl.scala
+++ b/server/src/main/scala/com/lbs/server/lang/Pl.scala
@@ -302,7 +302,7 @@ object Pl extends Lang {
|➡ Stwórz nowy monitoring przez /book""".stripMargin
override def appointmentIsBooked(term: TermExt, monitoring: Monitoring): String =
- s"""👍 Zarezerwowaliśmy za Ciebie termin!
+ s"""👍 Zarezerwowaliśmy termin dla ${monitoring.username}!
|
|⏱ ${formatDateTime(term.term.dateTimeFrom, locale)}
|${capitalize(doctor)}: ${term.term.doctor.firstName} ${term.term.doctor.lastName}
diff --git a/server/src/main/scala/com/lbs/server/lang/Ua.scala b/server/src/main/scala/com/lbs/server/lang/Ua.scala
index c248784..e8722d6 100644
--- a/server/src/main/scala/com/lbs/server/lang/Ua.scala
+++ b/server/src/main/scala/com/lbs/server/lang/Ua.scala
@@ -300,7 +300,7 @@ object Ua extends Lang {
|➡ Створити новий моніторінг /book""".stripMargin
override def appointmentIsBooked(term: TermExt, monitoring: Monitoring): String =
- s"""👍 Ми зерезевували візит для вас!
+ s"""👍 Ми зерезевували візит для ${monitoring.username}!
|
|⏱ ${formatDateTime(term.term.dateTimeFrom, locale)}
|${capitalize(doctor)}: ${term.term.doctor.firstName} ${term.term.doctor.lastName}
diff --git a/server/src/main/scala/com/lbs/server/repository/DataRepository.scala b/server/src/main/scala/com/lbs/server/repository/DataRepository.scala
index cc7bf8a..90145d1 100644
--- a/server/src/main/scala/com/lbs/server/repository/DataRepository.scala
+++ b/server/src/main/scala/com/lbs/server/repository/DataRepository.scala
@@ -265,6 +265,16 @@ class DataRepository(@Autowired em: EntityManager) {
.toSeq
}
+ def getUsernameById(userId: Long): Option[String] = {
+ em.createQuery(
+ "select credentials.username from Credentials credentials where credentials.userId = :userId",
+ classOf[String]
+ ).setParameter("userId", userId)
+ .getResultList
+ .asScala
+ .headOption
+ }
+
def findUserCredentialsByUserIdAndAccountId(userId: Long, accountId: Long): Option[Credentials] = {
em.createQuery(
"""select credentials from Credentials credentials where credentials.userId = :userId
diff --git a/server/src/main/scala/com/lbs/server/repository/model/Monitoring.scala b/server/src/main/scala/com/lbs/server/repository/model/Monitoring.scala
index f916029..6746306 100644
--- a/server/src/main/scala/com/lbs/server/repository/model/Monitoring.scala
+++ b/server/src/main/scala/com/lbs/server/repository/model/Monitoring.scala
@@ -11,6 +11,10 @@ class Monitoring extends RecordId {
@Column(name = "user_id", nullable = false)
var userId: JLong = _
+ @BeanProperty
+ @Column(name = "username", nullable = false)
+ var username: String = _
+
@BeanProperty
@Column(name = "account_id", nullable = false)
var accountId: JLong = _
@@ -99,6 +103,7 @@ class Monitoring extends RecordId {
object Monitoring {
def apply(
userId: Long,
+ username: String,
accountId: Long,
chatId: String,
sourceSystemId: Long,
@@ -123,6 +128,7 @@ object Monitoring {
): Monitoring = {
val monitoring = new Monitoring
monitoring.userId = userId
+ monitoring.username = username
monitoring.accountId = accountId
monitoring.chatId = chatId
monitoring.sourceSystemId = sourceSystemId
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 f521792..a39691d 100644
--- a/server/src/main/scala/com/lbs/server/service/DataService.scala
+++ b/server/src/main/scala/com/lbs/server/service/DataService.scala
@@ -80,11 +80,12 @@ class DataService {
dataRepository.findSettings(userId)
}
- def findUserAndAccountIdBySource(source: MessageSource): Option[(Long, Long)] = {
- val userIdMaybe = dataRepository.findUserId(source.chatId, source.sourceSystem.id).map(_.toLong)
- userIdMaybe.flatMap(userId =>
- dataRepository.findAccountId(userId).map(_.toLong).map(accountId => userId -> accountId)
- )
+ def findUserAndAccountIdBySource(source: MessageSource): Option[(Long, String, Long)] = {
+ for {
+ userId <- dataRepository.findUserId(source.chatId, source.sourceSystem.id).map(_.toLong)
+ accountId <- dataRepository.findAccountId(userId).map(_.toLong)
+ username <- dataRepository.getUsernameById(userId)
+ } yield (userId, username, accountId)
}
def findCredentialsByUsername(username: String, userId: Long): Option[Credentials] = {
@@ -95,6 +96,10 @@ class DataService {
dataRepository.getUserCredentials(userId)
}
+ def getUsernameById(userId: Long): Option[String] = {
+ dataRepository.getUsernameById(userId)
+ }
+
def findUserCredentialsByAccountId(userId: Long, accountId: Long): Option[Credentials] = {
dataRepository.findUserCredentialsByUserIdAndAccountId(userId, accountId)
}
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 4017b70..ff55a81 100644
--- a/server/src/main/scala/com/lbs/server/util/package.scala
+++ b/server/src/main/scala/com/lbs/server/util/package.scala
@@ -22,6 +22,7 @@ package object util {
val (userId, bookingData) = data
Monitoring(
userId = userId.userId,
+ username = userId.username,
accountId = userId.accountId,
chatId = userId.source.chatId,
sourceSystemId = userId.source.sourceSystem.id,
diff --git a/server/src/test/scala/com/lbs/server/conversation/AuthSpec.scala b/server/src/test/scala/com/lbs/server/conversation/AuthSpec.scala
index d9fe5dd..fa89667 100644
--- a/server/src/test/scala/com/lbs/server/conversation/AuthSpec.scala
+++ b/server/src/test/scala/com/lbs/server/conversation/AuthSpec.scala
@@ -11,7 +11,7 @@ class AuthSpec extends AkkaTestKit {
"An Auth actor " when {
val source = MessageSource(TelegramMessageSourceSystem, "1")
- val userId = UserId(1L, 1L, source)
+ val userId = UserId(1L, "", 1L, source)
"user is unauthorized" must {
val unauthorizedHelpActor = ConversationTestProbe[UnauthorizedHelp]()
@@ -53,7 +53,7 @@ class AuthSpec extends AkkaTestKit {
"forward initial message to chat actor after the user has logged in" in {
val cmd = Command(source, Message("1", Some("any")))
- val msg = LoggedIn(ForwardCommand(cmd), 1L, 1L)
+ val msg = LoggedIn(ForwardCommand(cmd), 1L, "", 1L)
auth ! msg
chatActor.expectMsg(cmd)
}
@@ -75,7 +75,7 @@ class AuthSpec extends AkkaTestKit {
val loginActorFactory: MessageSourceWithOriginatorTo[Login] = (_, _) => loginActor.conversation
val chatActorFactory: UserIdTo[Chat] = _ => chatActor.conversation
val dataService = mock(classOf[DataService])
- when(dataService.findUserAndAccountIdBySource(source)).thenReturn(Some(userId.userId, userId.accountId))
+ when(dataService.findUserAndAccountIdBySource(source)).thenReturn(Some(userId.userId, "", userId.accountId))
val auth = new Auth(source, dataService, unauthorizedHelpFactory, loginActorFactory, chatActorFactory)(system)