60 lines
2.0 KiB
Kotlin
60 lines
2.0 KiB
Kotlin
package dev.inmo.postssystem.core.publishing.exposed
|
|
|
|
import dev.inmo.postssystem.core.post.PostId
|
|
import dev.inmo.postssystem.core.publishing.TriggerControlKey
|
|
import dev.inmo.postssystem.core.publishing.repos.PublishingKeysRepo
|
|
import org.jetbrains.exposed.sql.*
|
|
import org.jetbrains.exposed.sql.transactions.transaction
|
|
|
|
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 {
|
|
transaction(
|
|
db = database
|
|
) {
|
|
SchemaUtils.createMissingTablesAndColumns(this@ExposedPublishingKeysRepo)
|
|
}
|
|
}
|
|
|
|
override suspend fun getPostIdByTriggerControlKey(key: TriggerControlKey): PostId? = transaction(
|
|
db = database
|
|
) {
|
|
select { triggerControlKeyColumn.eq(key) }.limit(1).firstOrNull() ?.getOrNull(postIdColumn)
|
|
}
|
|
|
|
override suspend fun getTriggerControlKeyByPostId(postId: PostId): TriggerControlKey? = transaction(
|
|
db = database
|
|
) {
|
|
select { postIdColumn.eq(postId) }.limit(1).firstOrNull() ?.getOrNull(triggerControlKeyColumn)
|
|
}
|
|
|
|
override suspend fun setPostTriggerControlKey(postId: PostId, key: TriggerControlKey): Boolean {
|
|
unsetPostTriggerControlKey(postId)
|
|
return transaction(
|
|
db = database
|
|
) {
|
|
insert {
|
|
it[postIdColumn] = postId
|
|
it[triggerControlKeyColumn] = triggerControlKeyColumn
|
|
}.getOrNull(postIdColumn) == postId
|
|
}
|
|
}
|
|
|
|
override suspend fun unsetPostTriggerControlKey(postId: PostId): Boolean = transaction(
|
|
db = database
|
|
) {
|
|
deleteWhere {
|
|
postIdColumn.eq(postId)
|
|
} > 0
|
|
}
|
|
}
|
|
|
|
class DatabasePublishingKeysRepo(
|
|
database: Database
|
|
): PublishingKeysRepo by ExposedPublishingKeysRepo(database)
|