PlaguPoster/ratings/selector/src/jvmMain/kotlin/Plugin.kt

34 lines
1.3 KiB
Kotlin
Raw Normal View History

2022-09-06 17:56:58 +00:00
package dev.inmo.plaguposter.ratings.selector
2023-11-12 15:57:21 +00:00
import dev.inmo.micro_utils.repos.KeyValueRepo
import dev.inmo.micro_utils.repos.exposed.keyvalue.ExposedKeyValueRepo
import dev.inmo.micro_utils.repos.mappers.withMapper
2022-09-06 17:56:58 +00:00
import dev.inmo.plagubot.Plugin
2023-11-12 15:57:21 +00:00
import dev.inmo.plaguposter.posts.models.PostId
2022-09-06 17:56:58 +00:00
import dev.inmo.plaguposter.ratings.selector.models.SelectorConfig
2023-11-12 15:57:21 +00:00
import korlibs.time.DateTime
2022-09-06 17:56:58 +00:00
import kotlinx.serialization.json.*
import org.jetbrains.exposed.sql.Database
import org.koin.core.module.Module
2023-11-12 15:57:21 +00:00
import org.koin.core.qualifier.qualifier
2022-09-06 17:56:58 +00:00
object Plugin : Plugin {
override fun Module.setupDI(database: Database, params: JsonObject) {
single { get<Json>().decodeFromJsonElement(SelectorConfig.serializer(), params["selector"] ?: return@single null) }
2023-11-12 15:57:21 +00:00
single<KeyValueRepo<PostId, DateTime>>(qualifier("latestChosenRepo")) {
ExposedKeyValueRepo(
get(),
{ text("post_id") },
{ double("date_time") },
"LatestChosenRepo"
).withMapper(
{ string },
{ unixMillis },
{ PostId(this) },
{ DateTime(this) }
)
}
single<Selector> { DefaultSelector(get(), get(), get(), get(qualifier("latestChosenRepo"))) }
2022-09-06 17:56:58 +00:00
}
}