added ratings

This commit is contained in:
2022-09-04 13:27:35 +06:00
parent 18b2e7b3c4
commit 1e393103c8
21 changed files with 437 additions and 32 deletions

View File

@@ -0,0 +1 @@
package dev.inmo.plaguposter.ratings.source

View File

@@ -0,0 +1,35 @@
package dev.inmo.plaguposter.ratings.source.models
import dev.inmo.plaguposter.ratings.models.Rating
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.*
typealias RatingsVariants = Map<String, Rating>
object RatingsVariantsSerializer : KSerializer<RatingsVariants> {
val surrogate = JsonObject.serializer()
override val descriptor: SerialDescriptor = surrogate.descriptor
override fun deserialize(decoder: Decoder): RatingsVariants {
val o = surrogate.deserialize(decoder)
return o.entries.mapNotNull { (key, value) ->
val doubleValue = (value as? JsonPrimitive) ?.doubleOrNull ?: return@mapNotNull null
key to Rating(doubleValue)
}.toMap()
}
override fun serialize(encoder: Encoder, value: RatingsVariants) {
surrogate.serialize(
encoder,
buildJsonObject {
value.forEach { (text, rating) ->
put(text, rating.double)
}
}
)
}
}

View File

@@ -0,0 +1,7 @@
package dev.inmo.plaguposter.ratings.source.models
import dev.inmo.plaguposter.ratings.models.Rating
fun interface VariantTransformer {
operator fun invoke(from: String): Rating?
}

View File

@@ -0,0 +1,8 @@
package dev.inmo.plaguposter.ratings.source.repos
import dev.inmo.micro_utils.repos.KeyValueRepo
import dev.inmo.plaguposter.common.ShortMessageInfo
import dev.inmo.plaguposter.posts.models.PostId
import dev.inmo.tgbotapi.types.PollIdentifier
interface PollsToMessagesInfoRepo : KeyValueRepo<PollIdentifier, ShortMessageInfo>

View File

@@ -0,0 +1,7 @@
package dev.inmo.plaguposter.ratings.source.repos
import dev.inmo.micro_utils.repos.KeyValueRepo
import dev.inmo.plaguposter.posts.models.PostId
import dev.inmo.tgbotapi.types.PollIdentifier
interface PollsToPostsIdsRepo : KeyValueRepo<PollIdentifier, PostId>