PlaguPoster/ratings/selector/src/commonMain/kotlin/DefaultSelector.kt

25 lines
839 B
Kotlin
Raw Normal View History

2022-09-06 17:56:58 +00:00
package dev.inmo.plaguposter.ratings.selector
2022-09-06 18:23:14 +00:00
import com.soywiz.klock.DateTime
2022-09-06 17:56:58 +00:00
import dev.inmo.plaguposter.posts.models.PostId
2022-09-09 12:01:50 +00:00
import dev.inmo.plaguposter.posts.repo.PostsRepo
2022-09-06 17:56:58 +00:00
import dev.inmo.plaguposter.ratings.repo.RatingsRepo
import dev.inmo.plaguposter.ratings.selector.models.SelectorConfig
class DefaultSelector (
private val config: SelectorConfig,
2022-09-09 12:01:50 +00:00
private val ratingsRepo: RatingsRepo,
private val postsRepo: PostsRepo
2022-09-06 17:56:58 +00:00
) : Selector {
2023-03-18 07:12:05 +00:00
override suspend fun take(n: Int, now: DateTime, exclude: List<PostId>): List<PostId> {
2022-09-06 17:56:58 +00:00
val result = mutableListOf<PostId>()
do {
2023-03-18 07:12:05 +00:00
val selected = config.active(now.time) ?.rating ?.select(ratingsRepo, postsRepo, result + exclude, now) ?: break
2022-09-06 17:56:58 +00:00
result.add(selected)
} while (result.size < n)
return result.toList()
}
}