Skip to content

Commit ff874bc

Browse files
committed
Save state for /start quizoji command
1 parent b0dfa90 commit ff874bc

File tree

6 files changed

+35
-6
lines changed

6 files changed

+35
-6
lines changed

quizoji/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ plugins {
55
dependencies {
66
api(project.projects.core)
77
api(libs.tgbotapi.core)
8+
implementation(project.projects.dialogs)
89
implementation(libs.log4j.api)
910
implementation(libs.tgbotapi.extensions.api)
1011
implementation(libs.tgbotapi.extensions.utils)

quizoji/src/main/kotlin/by/jprof/telegram/bot/quizoji/QuizojiStartCommandUpdateProcessor.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package by.jprof.telegram.bot.quizoji
22

33
import by.jprof.telegram.bot.core.UpdateProcessor
4+
import by.jprof.telegram.bot.dialogs.dao.DialogStateDAO
5+
import by.jprof.telegram.bot.dialogs.model.quizoji.WaitingForQuestion
46
import dev.inmo.tgbotapi.bot.RequestsExecutor
57
import dev.inmo.tgbotapi.extensions.api.send.sendMessage
68
import dev.inmo.tgbotapi.extensions.utils.asMessageUpdate
@@ -11,6 +13,7 @@ import dev.inmo.tgbotapi.types.update.abstracts.Update
1113
import org.apache.logging.log4j.LogManager
1214

1315
class QuizojiStartCommandUpdateProcessor(
16+
private val dialogStateDAO: DialogStateDAO,
1417
private val bot: RequestsExecutor,
1518
) : UpdateProcessor {
1619
companion object {
@@ -26,6 +29,8 @@ class QuizojiStartCommandUpdateProcessor(
2629
return
2730
}
2831

32+
dialogStateDAO.save(WaitingForQuestion(chat.id.chatId, message.user.id.chatId))
33+
2934
bot.sendMessage(
3035
chat = chat,
3136
text = "Let's create a Quizoji! First, send me the message. It can be anything — a text, photo, video, even a sticker."

quizoji/src/test/kotlin/by/jprof/telegram/bot/quizoji/QuizojiStartCommandUpdateProcessorTest.kt

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package by.jprof.telegram.bot.quizoji
22

3+
import by.jprof.telegram.bot.dialogs.dao.DialogStateDAO
4+
import by.jprof.telegram.bot.dialogs.model.quizoji.WaitingForQuestion
35
import com.soywiz.klock.DateTime
46
import dev.inmo.tgbotapi.bot.RequestsExecutor
57
import dev.inmo.tgbotapi.extensions.api.send.sendMessage
68
import dev.inmo.tgbotapi.types.Bot
79
import dev.inmo.tgbotapi.types.ChatId
10+
import dev.inmo.tgbotapi.types.CommonUser
811
import dev.inmo.tgbotapi.types.chat.PrivateChatImpl
912
import dev.inmo.tgbotapi.types.chat.abstracts.PrivateChat
1013
import dev.inmo.tgbotapi.types.message.PrivateContentMessageImpl
@@ -26,11 +29,15 @@ internal class QuizojiStartCommandUpdateProcessorTest {
2629
@MockK(relaxed = true)
2730
private lateinit var bot: RequestsExecutor
2831

32+
@MockK(relaxed = true)
33+
private lateinit var dialogStateDAO: DialogStateDAO
34+
2935
lateinit var sut: QuizojiStartCommandUpdateProcessor
3036

3137
@BeforeEach
3238
fun setUp() {
3339
sut = QuizojiStartCommandUpdateProcessor(
40+
dialogStateDAO = dialogStateDAO,
3441
bot = bot,
3542
)
3643
}
@@ -44,7 +51,7 @@ internal class QuizojiStartCommandUpdateProcessorTest {
4451
)
4552
)
4653

47-
verify { listOf(bot) wasNot called }
54+
verify { listOf(dialogStateDAO, bot) wasNot called }
4855

4956
clearAllMocks()
5057
}
@@ -58,7 +65,7 @@ internal class QuizojiStartCommandUpdateProcessorTest {
5865
)
5966
)
6067

61-
verify { listOf(bot) wasNot called }
68+
verify { listOf(dialogStateDAO, bot) wasNot called }
6269

6370
clearAllMocks()
6471
}
@@ -84,7 +91,7 @@ internal class QuizojiStartCommandUpdateProcessorTest {
8491
)
8592
)
8693

87-
verify { listOf(bot) wasNot called }
94+
verify { listOf(dialogStateDAO, bot) wasNot called }
8895

8996
clearAllMocks()
9097
}
@@ -110,7 +117,7 @@ internal class QuizojiStartCommandUpdateProcessorTest {
110117
)
111118
)
112119

113-
verify { listOf(bot) wasNot called }
120+
verify { listOf(dialogStateDAO, bot) wasNot called }
114121

115122
clearAllMocks()
116123
}
@@ -138,7 +145,7 @@ internal class QuizojiStartCommandUpdateProcessorTest {
138145
)
139146
)
140147

141-
verify { listOf(bot) wasNot called }
148+
verify { listOf(dialogStateDAO, bot) wasNot called }
142149

143150
clearAllMocks()
144151
}
@@ -154,7 +161,7 @@ internal class QuizojiStartCommandUpdateProcessorTest {
154161
updateId = 1,
155162
data = PrivateContentMessageImpl(
156163
messageId = 1,
157-
user = mockk(),
164+
user = CommonUser(id = ChatId(2), "Test"),
158165
chat = chat,
159166
content = TextContent(
160167
text = "/start quizoji"
@@ -170,6 +177,11 @@ internal class QuizojiStartCommandUpdateProcessorTest {
170177
)
171178
)
172179

180+
coVerify(exactly = 1) {
181+
dialogStateDAO.save(
182+
WaitingForQuestion(chatId = 1, userId = 2)
183+
)
184+
}
173185
coVerify(exactly = 1) {
174186
bot.sendMessage(
175187
chat = chat,

runners/lambda/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ dependencies {
1313
implementation(project.projects.jep)
1414
implementation(project.projects.youtube.dynamodb)
1515
implementation(project.projects.kotlin.dynamodb)
16+
implementation(project.projects.dialogs.dynamodb)
1617
implementation(project.projects.quizoji)
1718
}

runners/lambda/src/main/kotlin/by/jprof/telegram/bot/runners/lambda/config/database.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package by.jprof.telegram.bot.runners.lambda.config
22

3+
import by.jprof.telegram.bot.dialogs.dao.DialogStateDAO
34
import by.jprof.telegram.bot.kotlin.dao.KotlinMentionsDAO
45
import by.jprof.telegram.bot.votes.dao.VotesDAO
56
import by.jprof.telegram.bot.youtube.dao.YouTubeChannelsWhitelistDAO
67
import org.koin.core.qualifier.named
78
import org.koin.dsl.module
89
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient
10+
import by.jprof.telegram.bot.dialogs.dynamodb.dao.DialogStateDAO as DynamoDBDialogStateDAO
911
import by.jprof.telegram.bot.kotlin.dynamodb.dao.KotlinMentionsDAO as DynamoDBKotlinMentionsDAO
1012
import by.jprof.telegram.bot.votes.dynamodb.dao.VotesDAO as DynamoDBVotesDAO
1113
import by.jprof.telegram.bot.youtube.dynamodb.dao.YouTubeChannelsWhitelistDAO as DynamoDBYouTubeChannelsWhitelistDAO
@@ -35,4 +37,11 @@ val databaseModule = module {
3537
get(named(TABLE_KOTLIN_MENTIONS))
3638
)
3739
}
40+
41+
single<DialogStateDAO> {
42+
DynamoDBDialogStateDAO(
43+
get(),
44+
get(named(TABLE_DIALOG_STATES))
45+
)
46+
}
3847
}

runners/lambda/src/main/kotlin/by/jprof/telegram/bot/runners/lambda/config/pipeline.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ val pipelineModule = module {
4848

4949
single<UpdateProcessor>(named("QuizojiStartCommandUpdateProcessor")) {
5050
QuizojiStartCommandUpdateProcessor(
51+
dialogStateDAO = get(),
5152
bot = get(),
5253
)
5354
}

0 commit comments

Comments
 (0)