mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-06-01 23:45:28 +00:00
40 lines
1.7 KiB
Kotlin
40 lines
1.7 KiB
Kotlin
package dev.inmo.micro_utils.repos.exposed.keyvalue
|
|
|
|
import dev.inmo.micro_utils.exposed.paginate
|
|
import dev.inmo.micro_utils.pagination.Pagination
|
|
import dev.inmo.micro_utils.pagination.PaginationResult
|
|
import dev.inmo.micro_utils.pagination.createPaginationResult
|
|
import dev.inmo.micro_utils.repos.StandardReadKeyValueRepo
|
|
import org.jetbrains.exposed.sql.*
|
|
import org.jetbrains.exposed.sql.transactions.transaction
|
|
|
|
abstract class AbstractExposedReadKeyValueRepo<Key, Value>(
|
|
protected val database: Database,
|
|
protected val keyColumn: Column<Key>,
|
|
protected val valueColumn: Column<Value>
|
|
) : StandardReadKeyValueRepo<Key, Value>, Table() {
|
|
override val primaryKey: PrimaryKey = PrimaryKey(keyColumn, valueColumn)
|
|
|
|
override suspend fun get(k: Key): Value? = transaction(database) {
|
|
select { keyColumn.eq(k) }.limit(1).firstOrNull() ?.getOrNull(valueColumn)
|
|
}
|
|
|
|
override suspend fun contains(key: Key): Boolean = transaction(database) {
|
|
select { keyColumn.eq(key) }.limit(1).any()
|
|
}
|
|
|
|
override suspend fun count(): Long = transaction(database) { selectAll().count() }
|
|
|
|
override suspend fun keys(pagination: Pagination, reversed: Boolean): PaginationResult<Key> = transaction(database) {
|
|
selectAll().paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map {
|
|
it[keyColumn]
|
|
}
|
|
}.createPaginationResult(pagination, count())
|
|
|
|
override suspend fun values(pagination: Pagination, reversed: Boolean): PaginationResult<Value> = transaction(database) {
|
|
selectAll().paginate(pagination, keyColumn to if (reversed) SortOrder.DESC else SortOrder.ASC).map {
|
|
it[valueColumn]
|
|
}
|
|
}.createPaginationResult(pagination, count())
|
|
}
|