add settings template

This commit is contained in:
2022-08-21 18:00:51 +06:00
parent aa9f187203
commit 463a590861
9 changed files with 119 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
package dev.inmo.plaguposter.settings.exposed
import dev.inmo.micro_utils.repos.KeyValueRepo
import dev.inmo.micro_utils.repos.exposed.keyvalue.ExposedKeyValueRepo
import dev.inmo.micro_utils.repos.mappers.withMapper
import dev.inmo.plaguposter.settings.repo.SettingsRepo
import dev.inmo.tgbotapi.types.ChatId
import kotlinx.serialization.*
import kotlinx.serialization.json.Json
import org.jetbrains.exposed.sql.Database
class ExposedSettingsRepo<T>(
parent: KeyValueRepo<ChatId, T>
) : SettingsRepo<T>, KeyValueRepo<ChatId, T> by parent
@OptIn(InternalSerializationApi::class)
inline fun <reified T : Any> ExposedSettingsRepo(
parent: KeyValueRepo<Long, String>,
json: Json,
serializer: KSerializer<T> = T::class.serializer()
) = ExposedSettingsRepo<T>(
parent.withMapper<ChatId, T, Long, String>(
{ chatId },
{ json.encodeToString(serializer, this) },
{ ChatId(this) },
{ json.decodeFromString(serializer, this) }
)
)
@OptIn(InternalSerializationApi::class)
inline fun <reified T : Any> ExposedSettingsRepo(
database: Database,
json: Json,
serializer: KSerializer<T> = T::class.serializer(),
tableName: String = "settings_${T::class.simpleName!!}"
) = ExposedSettingsRepo<T>(
ExposedKeyValueRepo(
database,
{ long("chat_id") },
{ text("settings") },
tableName
),
json,
serializer
)
@OptIn(InternalSerializationApi::class)
inline fun <reified T : Any> SettingsRepo(
parent: KeyValueRepo<Long, String>,
json: Json,
serializer: KSerializer<T> = T::class.serializer()
) = ExposedSettingsRepo<T>(parent, json, serializer)
@OptIn(InternalSerializationApi::class)
inline fun <reified T : Any> SettingsRepo(
database: Database,
json: Json,
serializer: KSerializer<T> = T::class.serializer(),
tableName: String = "settings_${T::class.simpleName!!}"
) = ExposedSettingsRepo(database, json, serializer, tableName)