This commit is contained in:
2022-09-09 17:27:11 +06:00
parent 53675ca598
commit 6d8bc0326f
13 changed files with 126 additions and 5 deletions

View File

@@ -1,5 +1,7 @@
package dev.inmo.plaguposter.posts.models
import com.soywiz.klock.DateTime
import dev.inmo.plaguposter.common.DateTimeSerializer
import dev.inmo.tgbotapi.types.ChatId
import kotlinx.serialization.Serializable
@@ -16,5 +18,7 @@ data class NewPost(
@Serializable
data class RegisteredPost(
val id: PostId,
@Serializable(DateTimeSerializer::class)
val created: DateTime,
override val content: List<PostContentInfo>
) : Post

View File

@@ -1,5 +1,6 @@
package dev.inmo.plaguposter.posts.repo
import com.soywiz.klock.DateTime
import dev.inmo.micro_utils.repos.ReadCRUDRepo
import dev.inmo.plaguposter.posts.models.*
import dev.inmo.tgbotapi.types.ChatId
@@ -7,4 +8,5 @@ import dev.inmo.tgbotapi.types.MessageIdentifier
interface ReadPostsRepo : ReadCRUDRepo<RegisteredPost, PostId> {
suspend fun getIdByChatAndMessage(chatId: ChatId, messageId: MessageIdentifier): PostId?
suspend fun getPostCreationTime(postId: PostId): DateTime?
}

View File

@@ -1,6 +1,7 @@
package dev.inmo.plaguposter.posts.exposed
import com.benasher44.uuid.uuid4
import com.soywiz.klock.DateTime
import dev.inmo.micro_utils.repos.KeyValuesRepo
import dev.inmo.micro_utils.repos.exposed.AbstractExposedCRUDRepo
import dev.inmo.micro_utils.repos.exposed.initTable
@@ -21,6 +22,9 @@ class ExposedPostsRepo(
tableName = "posts"
) {
val idColumn = text("id").clientDefault { uuid4().toString() }
val createdColumn = double("datetime").default(0.0).clientDefault {
DateTime.nowUnix()
}
private val contentRepo by lazy {
ExposedContentInfoRepo(
@@ -38,6 +42,7 @@ class ExposedPostsRepo(
val id = PostId(get(idColumn))
return RegisteredPost(
id,
DateTime(get(createdColumn)),
with(contentRepo) {
select { postIdColumn.eq(id.string) }.map {
it.asObject
@@ -70,6 +75,7 @@ class ExposedPostsRepo(
return RegisteredPost(
id,
DateTime(get(createdColumn)),
with(contentRepo) {
select { postIdColumn.eq(id.string) }.map {
it.asObject
@@ -130,4 +136,8 @@ class ExposedPostsRepo(
} ?.let(::PostId)
}
}
override suspend fun getPostCreationTime(postId: PostId): DateTime? = transaction(database) {
select { selectById(postId) }.limit(1).firstOrNull() ?.get(createdColumn) ?.let(::DateTime)
}
}