TelegramBotApiLibraries/cache/admins/micro_utils/src/jvmMain/kotlin/dev/inmo/tgbotapi/libraries/cache/admins/AdminsCacheAPI.kt

69 lines
2.6 KiB
Kotlin
Raw Normal View History

2021-02-22 12:11:12 +00:00
package dev.inmo.tgbotapi.libraries.cache.admins
import dev.inmo.micro_utils.repos.exposed.keyvalue.ExposedKeyValueRepo
import dev.inmo.micro_utils.repos.exposed.onetomany.ExposedOneToManyKeyValueRepo
import dev.inmo.micro_utils.repos.mappers.withMapper
import dev.inmo.tgbotapi.bot.TelegramBot
2021-02-22 13:53:51 +00:00
import dev.inmo.tgbotapi.extensions.behaviour_builder.BehaviourContext
2021-02-22 12:11:12 +00:00
import dev.inmo.tgbotapi.libraries.cache.admins.micro_utils.DefaultAdminsCacheAPIRepo
import dev.inmo.tgbotapi.libraries.cache.admins.micro_utils.DynamicAdminsCacheSettingsAPI
2021-02-22 15:01:08 +00:00
import dev.inmo.tgbotapi.types.*
import dev.inmo.tgbotapi.types.ChatMember.abstracts.AdministratorChatMember
2021-02-22 12:11:12 +00:00
import kotlinx.coroutines.CoroutineScope
import kotlinx.serialization.cbor.Cbor
import kotlinx.serialization.decodeFromByteArray
import kotlinx.serialization.encodeToByteArray
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.statements.api.ExposedBlob
private val serializationFormat = Cbor
fun AdminsCacheAPI(
bot: TelegramBot,
database: Database,
2021-02-22 15:01:08 +00:00
scope: CoroutineScope
) : AdminsCacheAPI = DefaultAdminsCacheAPI(
bot,
DefaultAdminsCacheAPIRepo(
2021-02-22 12:11:12 +00:00
ExposedOneToManyKeyValueRepo(
database,
{ long("chatId") },
{ blob("member") },
"AdminsTable"
2021-02-22 15:01:08 +00:00
).withMapper<ChatId, AdministratorChatMember, Identifier, ExposedBlob>(
2021-02-22 12:11:12 +00:00
keyFromToTo = { chatId },
valueFromToTo = { ExposedBlob(serializationFormat.encodeToByteArray(this)) },
keyToToFrom = { toChatId() },
valueToToFrom = { serializationFormat.decodeFromByteArray(bytes) }
),
ExposedKeyValueRepo(
database,
{ long("chatId") },
{ long("datetime") },
"AdminsUpdatesTimesTable"
2021-02-22 15:01:08 +00:00
).withMapper<ChatId, Long, Identifier, Long>(
2021-02-22 12:11:12 +00:00
keyFromToTo = { chatId },
2021-02-22 15:01:08 +00:00
valueFromToTo = { this },
keyToToFrom = { toChatId() },
valueToToFrom = { this }
2021-02-22 12:11:12 +00:00
),
scope
),
2021-02-22 15:01:08 +00:00
DynamicAdminsCacheSettingsAPI(
2021-02-22 12:11:12 +00:00
ExposedKeyValueRepo(
database,
{ long("chatId") },
{ blob("settings") },
"DynamicAdminsCacheSettingsAPI"
2021-02-22 15:01:08 +00:00
).withMapper<ChatId, AdminsCacheSettings, Identifier, ExposedBlob>(
2021-02-22 12:11:12 +00:00
keyFromToTo = { chatId },
valueFromToTo = { ExposedBlob(serializationFormat.encodeToByteArray(this)) },
keyToToFrom = { toChatId() },
valueToToFrom = { serializationFormat.decodeFromByteArray(bytes) }
),
scope
)
)
2021-02-22 13:53:51 +00:00
fun BehaviourContext.AdminsCacheAPI(database: Database) = AdminsCacheAPI(this, database, this)