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

84 lines
3.5 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
2022-06-11 13:45:29 +00:00
import dev.inmo.micro_utils.repos.exposed.onetomany.ExposedKeyValuesRepo
2021-02-22 12:11:12 +00:00
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
import dev.inmo.tgbotapi.libraries.cache.admins.micro_utils.DefaultAdminsCacheAPIRepoImpl
2021-02-22 12:11:12 +00:00
import dev.inmo.tgbotapi.libraries.cache.admins.micro_utils.DynamicAdminsCacheSettingsAPI
2021-02-22 15:01:08 +00:00
import dev.inmo.tgbotapi.types.*
2022-05-22 05:56:30 +00:00
import dev.inmo.tgbotapi.types.chat.member.*
2021-02-22 12:11:12 +00:00
import kotlinx.coroutines.CoroutineScope
2021-02-23 06:33:50 +00:00
import kotlinx.serialization.*
import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import kotlinx.serialization.modules.polymorphic
2021-02-22 12:11:12 +00:00
import org.jetbrains.exposed.sql.Database
val telegramAdminsSerializationFormat = Json {
2021-02-23 06:33:50 +00:00
ignoreUnknownKeys = true
serializersModule = SerializersModule {
polymorphic(AdministratorChatMember::class) {
subclass(AdministratorChatMemberImpl::class, AdministratorChatMemberImpl.serializer())
2022-08-06 03:31:11 +00:00
subclass(OwnerChatMember::class, OwnerChatMember.serializer())
2021-02-23 06:33:50 +00:00
}
contextual(AdministratorChatMember::class, PolymorphicSerializer(AdministratorChatMember::class))
}
}
2021-02-22 12:11:12 +00:00
2022-09-10 12:54:25 +00:00
fun BehaviourContext.createAdminsCacheAPI(database: Database) = AdminsCacheAPI(this, database, this)
2022-09-10 12:54:25 +00:00
fun TelegramBot.createAdminsCacheAPI(
database: Database,
scope: CoroutineScope,
defaultAdminsCacheAPIRepo: DefaultAdminsCacheAPIRepo = DefaultAdminsCacheAPIRepoImpl(
ExposedKeyValuesRepo(
database,
{ long("chatId") },
{ text("member") },
"AdminsTable"
2022-11-10 15:25:31 +00:00
).withMapper<IdChatIdentifier, AdministratorChatMember, Identifier, String>(
keyFromToTo = { chatId },
2022-09-18 19:56:41 +00:00
valueFromToTo = { telegramAdminsSerializationFormat.encodeToString(AdministratorChatMember.serializer(), this) },
keyToToFrom = { toChatId() },
2022-09-18 19:56:41 +00:00
valueToToFrom = { telegramAdminsSerializationFormat.decodeFromString(AdministratorChatMember.serializer(), this) }
),
ExposedKeyValueRepo(
database,
{ long("chatId") },
{ long("datetime") },
"AdminsUpdatesTimesTable"
2022-11-10 15:25:31 +00:00
).withMapper<IdChatIdentifier, Long, Identifier, Long>(
keyFromToTo = { chatId },
valueFromToTo = { this },
keyToToFrom = { toChatId() },
valueToToFrom = { this }
),
scope
),
adminsCacheSettingsAPI: AdminsCacheSettingsAPI = DynamicAdminsCacheSettingsAPI(
ExposedKeyValueRepo(
database,
{ long("chatId") },
{ text("settings") },
"DynamicAdminsCacheSettingsAPI"
2022-11-10 15:25:31 +00:00
).withMapper<IdChatIdentifier, AdminsCacheSettings, Identifier, String>(
keyFromToTo = { chatId },
2022-09-18 19:56:41 +00:00
valueFromToTo = { telegramAdminsSerializationFormat.encodeToString(AdminsCacheSettings.serializer() , this) },
keyToToFrom = { toChatId() },
2022-09-18 19:56:41 +00:00
valueToToFrom = { telegramAdminsSerializationFormat.decodeFromString(AdminsCacheSettings.serializer() , this) }
),
scope
)
) = DefaultAdminsCacheAPI(this, defaultAdminsCacheAPIRepo, adminsCacheSettingsAPI)
2022-09-10 12:54:25 +00:00
fun AdminsCacheAPI(
bot: TelegramBot,
database: Database,
scope: CoroutineScope
) : AdminsCacheAPI = bot.createAdminsCacheAPI(
database,
scope
)