2022-09-06 17:56:58 +00:00
|
|
|
package dev.inmo.plaguposter.ratings.selector
|
|
|
|
|
2023-11-12 15:57:21 +00:00
|
|
|
import dev.inmo.micro_utils.repos.KeyValueRepo
|
2023-08-12 17:58:28 +00:00
|
|
|
import korlibs.time.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,
|
2023-11-12 15:57:21 +00:00
|
|
|
private val postsRepo: PostsRepo,
|
|
|
|
private val latestChosenRepo: KeyValueRepo<PostId, DateTime>
|
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-11-12 15:57:21 +00:00
|
|
|
val selected = config.active(now.time) ?.rating ?.select(ratingsRepo, postsRepo, result + exclude, now, latestChosenRepo) ?: break
|
2022-09-06 17:56:58 +00:00
|
|
|
result.add(selected)
|
|
|
|
} while (result.size < n)
|
|
|
|
|
|
|
|
return result.toList()
|
|
|
|
}
|
|
|
|
}
|