Skip to content

Commit 530dfc9

Browse files
committed
wrap database job with spring scheduler
1 parent 6406d64 commit 530dfc9

File tree

16 files changed

+132
-137
lines changed

16 files changed

+132
-137
lines changed

β€Žapp-db/build.gradle.kts

Lines changed: 0 additions & 29 deletions
This file was deleted.

β€Žapp-db/src/main/db/initial.xml

Lines changed: 0 additions & 43 deletions
This file was deleted.

β€Žsettings.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,3 @@
99

1010
rootProject.name = "coding-problems-bot"
1111
include("telegram-bot")
12-
include("app-db")

β€Žtelegram-bot/build.gradle.kts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
22

33
plugins {
4-
// Apply the org.jetbrains.kotlin.jvm Plugin to add support for Kotlin.
54
id("org.jetbrains.kotlin.jvm") version "1.4.20"
65
id("org.springframework.boot") version "2.4.0"
76
id("io.spring.dependency-management") version "1.0.10.RELEASE"
@@ -26,10 +25,8 @@ val flexmarkVersion = "0.62.2"
2625
val h2r2dbcVersion = "0.8.4.RELEASE"
2726

2827
dependencies {
29-
// Align versions of all Kotlin components
3028
implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
3129

32-
//jackson support
3330
implementation(platform("com.fasterxml.jackson:jackson-bom:$jacksonVersion"))
3431
implementation("com.fasterxml.jackson.core:jackson-databind")
3532
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
@@ -38,37 +35,30 @@ dependencies {
3835
implementation("org.jetbrains.kotlin:kotlin-reflect")
3936
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
4037

41-
// Coroutines support
4238
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$xCoroutinesVersion")
4339
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:$xCoroutinesVersion")
4440
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
4541

4642

47-
// Logging framework
4843
implementation("ch.qos.logback:logback-core:$logbackVersion")
4944
implementation("ch.qos.logback:logback-classic:$logbackVersion")
5045
implementation("org.slf4j:slf4j-api:$slf4jVersion")
5146

52-
// This dependency is used by the application.
5347
implementation("com.google.guava:guava:29.0-jre")
5448
implementation("dev.inmo:tgbotapi:$tgbotapiVersion")
5549
implementation("com.codeborne:selenide:$selenideVersion")
5650
implementation("com.vladsch.flexmark:flexmark-all:$flexmarkVersion")
57-
58-
// spring
5951
implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
6052
implementation("org.springframework.boot:spring-boot-starter-webflux")
61-
62-
// database
6353
implementation("io.r2dbc:r2dbc-h2:$h2r2dbcVersion")
64-
// Use JUnit 5 for testing.
54+
6555
testImplementation(platform("org.junit:junit-bom:$junitVersion"))
6656
testRuntimeOnly(platform("org.junit:junit-bom:$junitVersion"))
6757
testImplementation("org.junit.jupiter:junit-jupiter-api")
6858
testImplementation("org.junit.jupiter:junit-jupiter-params")
6959
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
70-
7160
testImplementation("io.projectreactor:reactor-test")
61+
testImplementation("org.springframework.boot:spring-boot-starter-test")
7262

7363
}
7464

@@ -83,4 +73,3 @@ tasks {
8373
useJUnitPlatform()
8474
}
8575
}
86-

β€Žtelegram-bot/src/main/kotlin/by/jprof/coding/problems/bot/App.kt

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,10 @@
11
package by.jprof.coding.problems.bot
22

3-
import by.jprof.coding.problems.bot.repository.ProblemRepository
4-
import by.jprof.coding.problems.bot.scraper.LeetCodeProblemsScraper
5-
import org.springframework.boot.CommandLineRunner
63
import org.springframework.boot.autoconfigure.SpringBootApplication
74
import org.springframework.boot.runApplication
85

96
@SpringBootApplication
10-
class App(
11-
private val scraper: LeetCodeProblemsScraper,
12-
private val problemRepository: ProblemRepository
13-
) : CommandLineRunner {
14-
15-
16-
17-
override fun run(vararg args: String?) {
18-
problemRepository.saveAll(scraper.scrapeAllLeetCodeProblems())
19-
TODO("finish")
20-
}
21-
22-
}
23-
7+
class App
248

259
fun main(args: Array<String>) {
2610
runApplication<App>(*args)

β€Žtelegram-bot/src/main/kotlin/by/jprof/coding/problems/bot/config/ApplicationConfiguration.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
package by.jprof.coding.problems.bot.config
22

33
import dev.inmo.tgbotapi.bot.Ktor.telegramBot
4-
import dev.inmo.tgbotapi.bot.RequestsExecutor
54
import dev.inmo.tgbotapi.bot.TelegramBot
6-
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
7-
import dev.inmo.tgbotapi.types.message.abstracts.Message
8-
import dev.inmo.tgbotapi.types.message.content.TextContent
95
import io.r2dbc.spi.ConnectionFactories
106
import io.r2dbc.spi.ConnectionFactory
117
import org.springframework.context.annotation.Bean
128
import org.springframework.context.annotation.Configuration
139
import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration
1410
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories
11+
import org.springframework.scheduling.annotation.EnableScheduling
1512

1613
@Configuration
1714
@EnableR2dbcRepositories
15+
@EnableScheduling
1816
class ApplicationConfiguration : AbstractR2dbcConfiguration() {
1917
companion object {
2018
val BOT_TOKEN = System.getenv("BOT_TOKEN")!!
@@ -30,4 +28,3 @@ class ApplicationConfiguration : AbstractR2dbcConfiguration() {
3028
}
3129
}
3230

33-
val Message.text get() = ((this as? ContentMessage<*>)?.content as? TextContent)?.text
Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,39 @@
11
package by.jprof.coding.problems.bot.domain
22

33
import org.springframework.data.annotation.Id
4+
import org.springframework.data.domain.Persistable
45
import org.springframework.data.relational.core.mapping.Table
6+
import java.util.*
57

68

7-
class Platforms {
8-
companion object {
9-
const val LEETCODE = "Leetcode"
10-
}
9+
enum class Platform(val platform: String) {
10+
LEETCODE("Leetcode")
11+
}
12+
13+
enum class Messenger(val messenger: String) {
14+
TELEGRAM("Telegram")
1115
}
1216

1317
@Table
1418
data class Problem(
15-
@Id
16-
val id: String,
19+
@Id @JvmField var id: String,
1720
val link: String,
1821
val title: String,
19-
val acceptance: Float?,
22+
val acceptance: String?,
2023
val difficulty: String,
21-
val platform: String = Platforms.LEETCODE
24+
val platform: String = Platform.LEETCODE.platform
25+
) : Persistable<String> {
26+
override fun getId(): String = id
27+
28+
override fun isNew(): Boolean {
29+
val new = id.isEmpty()
30+
id = if (new) UUID.randomUUID().toString() else id
31+
return new
32+
}
33+
34+
}
35+
36+
data class Chat(
37+
val id: String,
38+
val messenger: String = Messenger.TELEGRAM.messenger
2239
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package by.jprof.coding.problems.bot.ext
2+
3+
import dev.inmo.tgbotapi.types.message.abstracts.ContentMessage
4+
import dev.inmo.tgbotapi.types.message.abstracts.Message
5+
import dev.inmo.tgbotapi.types.message.content.TextContent
6+
7+
val Message.text get() = ((this as? ContentMessage<*>)?.content as? TextContent)?.text

β€Žtelegram-bot/src/main/kotlin/by/jprof/coding/problems/bot/hook/WebhookListener.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@ package by.jprof.coding.problems.bot.hook
33
import by.jprof.coding.problems.bot.service.TgUpdateHandlingService
44
import dev.inmo.tgbotapi.types.update.abstracts.Update
55
import org.springframework.http.HttpStatus
6-
import org.springframework.http.MediaType
7-
import org.springframework.web.bind.annotation.RequestMapping
8-
import org.springframework.web.bind.annotation.RequestMethod
6+
import org.springframework.http.MediaType.APPLICATION_JSON_VALUE
7+
import org.springframework.web.bind.annotation.PostMapping
98
import org.springframework.web.bind.annotation.ResponseStatus
109
import org.springframework.web.bind.annotation.RestController
11-
import reactor.core.publisher.Mono
1210

1311
@RestController
14-
@RequestMapping("/")
1512
class WebhookListener(private val tgUpdateHandlingService: TgUpdateHandlingService) {
13+
companion object {
14+
private val EMPTY_JSON_BODY = "{}"
15+
}
1616

17-
@RequestMapping(method = [RequestMethod.POST], produces = [MediaType.APPLICATION_JSON_VALUE])
17+
@PostMapping(produces = [APPLICATION_JSON_VALUE], consumes = [APPLICATION_JSON_VALUE])
1818
@ResponseStatus(HttpStatus.OK)
19-
suspend fun processUpdate(update: Update) : Mono<String> {
20-
tgUpdateHandlingService.handleUpdate(update);
21-
return Mono.just("{}")
19+
suspend fun processUpdate(update: Update) : String {
20+
tgUpdateHandlingService.handleUpdate(update)
21+
return EMPTY_JSON_BODY
2222
}
2323

2424
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package by.jprof.coding.problems.bot.projection
2+
3+
interface ProblemLink {
4+
fun getLink(): String
5+
}

0 commit comments

Comments
Β (0)