core/publishing/exposed/src/jvmMain/kotlin/dev/inmo/postssystem/core/publishing/exposed/ExposedPublishingKeysRepo.kt

60 lines
2.0 KiB
Kotlin
Raw Normal View History

2020-11-25 08:08:45 +00:00
package dev.inmo.postssystem.core.publishing.exposed
2020-07-30 09:28:11 +00:00
2020-11-25 08:08:45 +00:00
import dev.inmo.postssystem.core.post.PostId
import dev.inmo.postssystem.core.publishing.TriggerControlKey
import dev.inmo.postssystem.core.publishing.repos.PublishingKeysRepo
2020-07-30 09:28:11 +00:00
import org.jetbrains.exposed.sql.*
2020-07-30 13:40:33 +00:00
import org.jetbrains.exposed.sql.transactions.transaction
2020-07-30 09:28:11 +00:00
class ExposedPublishingKeysRepo(
private val database: Database
) : PublishingKeysRepo, Table() {
private val postIdColumn: Column<PostId> = text("postId")
private val triggerControlKeyColumn: Column<PostId> = text("triggerControlKey")
override val primaryKey: PrimaryKey = PrimaryKey(postIdColumn, triggerControlKeyColumn)
init {
2020-07-30 13:40:33 +00:00
transaction(
db = database
) {
2020-07-30 09:28:11 +00:00
SchemaUtils.createMissingTablesAndColumns(this@ExposedPublishingKeysRepo)
}
}
2020-07-31 05:28:27 +00:00
override suspend fun getPostIdByTriggerControlKey(key: TriggerControlKey): PostId? = transaction(
2020-07-30 09:28:11 +00:00
db = database
) {
select { triggerControlKeyColumn.eq(key) }.limit(1).firstOrNull() ?.getOrNull(postIdColumn)
}
2020-07-31 05:28:27 +00:00
override suspend fun getTriggerControlKeyByPostId(postId: PostId): TriggerControlKey? = transaction(
2020-07-30 09:28:11 +00:00
db = database
) {
select { postIdColumn.eq(postId) }.limit(1).firstOrNull() ?.getOrNull(triggerControlKeyColumn)
}
2020-07-31 05:28:27 +00:00
override suspend fun setPostTriggerControlKey(postId: PostId, key: TriggerControlKey): Boolean {
2020-07-30 09:28:11 +00:00
unsetPostTriggerControlKey(postId)
2020-07-31 05:28:27 +00:00
return transaction(
db = database
) {
insert {
it[postIdColumn] = postId
it[triggerControlKeyColumn] = triggerControlKeyColumn
}.getOrNull(postIdColumn) == postId
}
2020-07-30 09:28:11 +00:00
}
2020-07-31 05:28:27 +00:00
override suspend fun unsetPostTriggerControlKey(postId: PostId): Boolean = transaction(
2020-07-30 09:28:11 +00:00
db = database
) {
deleteWhere {
postIdColumn.eq(postId)
} > 0
}
}
class DatabasePublishingKeysRepo(
database: Database
): PublishingKeysRepo by ExposedPublishingKeysRepo(database)