PlaguPoster/ratings/source/src/jvmMain/kotlin/repos/ExposedPollsToMessagesInfoRepo.kt

47 lines
1.6 KiB
Kotlin
Raw Normal View History

2022-09-04 07:27:35 +00:00
package dev.inmo.plaguposter.ratings.source.repos
import dev.inmo.micro_utils.repos.exposed.initTable
import dev.inmo.micro_utils.repos.exposed.keyvalue.AbstractExposedKeyValueRepo
import dev.inmo.plaguposter.common.ShortMessageInfo
import dev.inmo.tgbotapi.types.ChatId
import dev.inmo.tgbotapi.types.PollIdentifier
import org.jetbrains.exposed.sql.*
2022-10-25 06:46:31 +00:00
import org.jetbrains.exposed.sql.statements.*
2022-09-04 07:27:35 +00:00
class ExposedPollsToMessagesInfoRepo(
database: Database
) : PollsToMessagesInfoRepo, AbstractExposedKeyValueRepo<PollIdentifier, ShortMessageInfo>(
database,
"polls_to_their_messages_info"
) {
override val keyColumn = text("poll_id")
private val chatIdColumn = long("chat_id")
private val messageIdColumn = long("message_id")
override val selectById: SqlExpressionBuilder.(PollIdentifier) -> Op<Boolean> = { keyColumn.eq(it) }
override val selectByValue: SqlExpressionBuilder.(ShortMessageInfo) -> Op<Boolean> = {
chatIdColumn.eq(it.chatId.chatId).and(
messageIdColumn.eq(it.messageId)
)
}
override val ResultRow.asKey: PollIdentifier
get() = get(keyColumn)
override val ResultRow.asObject: ShortMessageInfo
get() = ShortMessageInfo(
get(chatIdColumn).let(::ChatId),
get(messageIdColumn)
)
init {
initTable()
}
2022-10-25 06:46:31 +00:00
override fun update(k: PollIdentifier, v: ShortMessageInfo, it: UpdateBuilder<Int>) {
2022-09-04 07:27:35 +00:00
it[chatIdColumn] = v.chatId.chatId
it[messageIdColumn] = v.messageId
}
2022-10-25 06:46:31 +00:00
override fun insertKey(k: PollIdentifier, v: ShortMessageInfo, it: InsertStatement<Number>) {
2022-09-04 07:27:35 +00:00
it[keyColumn] = k
}
}