mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2024-06-01 23:45:28 +00:00
40 lines
1.3 KiB
Kotlin
40 lines
1.3 KiB
Kotlin
package dev.inmo.micro_utils.repos.exposed
|
|
|
|
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.ReadStandardCRUDRepo
|
|
import org.jetbrains.exposed.sql.*
|
|
import org.jetbrains.exposed.sql.transactions.transaction
|
|
|
|
abstract class AbstractExposedReadCRUDRepo<ObjectType, IdType>(
|
|
tableName: String
|
|
) :
|
|
ReadStandardCRUDRepo<ObjectType, IdType>,
|
|
ExposedCRUDRepo<ObjectType, IdType>,
|
|
Table(tableName)
|
|
{
|
|
override suspend fun getByPagination(pagination: Pagination): PaginationResult<ObjectType> {
|
|
return transaction(db = database) {
|
|
selectAll().paginate(pagination).map {
|
|
it.asObject
|
|
}.createPaginationResult(
|
|
pagination,
|
|
selectAll().count()
|
|
)
|
|
}
|
|
}
|
|
override suspend fun getById(id: IdType): ObjectType? {
|
|
return transaction(db = database) {
|
|
select {
|
|
selectById(id)
|
|
}.limit(1).firstOrNull() ?.asObject
|
|
}
|
|
}
|
|
|
|
override suspend fun contains(id: IdType): Boolean = transaction(db = database) {
|
|
select { selectById(id) }.limit(1).any()
|
|
}
|
|
}
|