mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-30 23:16:08 +02:00
35 lines
1.2 KiB
Scala
35 lines
1.2 KiB
Scala
|
package com.twitter.home_mixer.functional_component.candidate_source
|
||
|
|
||
|
import com.twitter.hermit.candidate.{thriftscala => t}
|
||
|
import com.twitter.product_mixer.core.functional_component.candidate_source.CandidateSource
|
||
|
import com.twitter.product_mixer.core.model.common.identifier.CandidateSourceIdentifier
|
||
|
import com.twitter.stitch.Stitch
|
||
|
import com.twitter.strato.client.Fetcher
|
||
|
import com.twitter.strato.generated.client.recommendations.similarity.SimilarUsersBySimsOnUserClientColumn
|
||
|
|
||
|
import javax.inject.Inject
|
||
|
import javax.inject.Singleton
|
||
|
|
||
|
@Singleton
|
||
|
class SimilarityBasedUsersCandidateSource @Inject() (
|
||
|
similarUsersBySimsOnUserClientColumn: SimilarUsersBySimsOnUserClientColumn)
|
||
|
extends CandidateSource[Seq[Long], t.Candidate] {
|
||
|
|
||
|
override val identifier: CandidateSourceIdentifier =
|
||
|
CandidateSourceIdentifier("SimilarityBasedUsers")
|
||
|
|
||
|
private val fetcher: Fetcher[Long, Unit, t.Candidates] =
|
||
|
similarUsersBySimsOnUserClientColumn.fetcher
|
||
|
|
||
|
override def apply(request: Seq[Long]): Stitch[Seq[t.Candidate]] = {
|
||
|
Stitch
|
||
|
.collect {
|
||
|
request.map { userId =>
|
||
|
fetcher.fetch(userId, Unit).map { result =>
|
||
|
result.v.map(_.candidates).getOrElse(Seq.empty)
|
||
|
}
|
||
|
}
|
||
|
}.map(_.flatten)
|
||
|
}
|
||
|
}
|