mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-03 17:58:47 +02:00
55 lines
2.3 KiB
Scala
55 lines
2.3 KiB
Scala
package com.twitter.home_mixer.functional_component.decorator.urt.builder
|
|
|
|
import com.twitter.home_mixer.model.HomeFeatures.PerspectiveFilteredLikedByUserIdsFeature
|
|
import com.twitter.home_mixer.model.HomeFeatures.SGSValidLikedByUserIdsFeature
|
|
import com.twitter.home_mixer.product.following.model.HomeMixerExternalStrings
|
|
import com.twitter.product_mixer.component_library.model.candidate.TweetCandidate
|
|
import com.twitter.product_mixer.core.feature.featuremap.FeatureMap
|
|
import com.twitter.product_mixer.core.functional_component.decorator.urt.builder.social_context.BaseSocialContextBuilder
|
|
import com.twitter.product_mixer.core.model.marshalling.response.urt.metadata.LikeGeneralContextType
|
|
import com.twitter.product_mixer.core.model.marshalling.response.urt.metadata.SocialContext
|
|
import com.twitter.product_mixer.core.pipeline.PipelineQuery
|
|
import com.twitter.product_mixer.core.product.guice.scope.ProductScoped
|
|
import com.twitter.stringcenter.client.StringCenter
|
|
import javax.inject.Inject
|
|
import javax.inject.Provider
|
|
import javax.inject.Singleton
|
|
|
|
@Singleton
|
|
case class LikedBySocialContextBuilder @Inject() (
|
|
externalStrings: HomeMixerExternalStrings,
|
|
@ProductScoped stringCenterProvider: Provider[StringCenter])
|
|
extends BaseSocialContextBuilder[PipelineQuery, TweetCandidate] {
|
|
|
|
private val stringCenter = stringCenterProvider.get()
|
|
|
|
private val engagerSocialContextBuilder = EngagerSocialContextBuilder(
|
|
contextType = LikeGeneralContextType,
|
|
stringCenter = stringCenter,
|
|
oneUserString = externalStrings.socialContextOneUserLikedString,
|
|
twoUsersString = externalStrings.socialContextTwoUsersLikedString,
|
|
moreUsersString = externalStrings.socialContextMoreUsersLikedString,
|
|
timelineTitle = externalStrings.socialContextLikedByTimelineTitle
|
|
)
|
|
|
|
def apply(
|
|
query: PipelineQuery,
|
|
candidate: TweetCandidate,
|
|
candidateFeatures: FeatureMap
|
|
): Option[SocialContext] = {
|
|
|
|
// Liked by users are valid only if they pass both the SGS and Perspective filters.
|
|
val validLikedByUserIds =
|
|
candidateFeatures
|
|
.getOrElse(SGSValidLikedByUserIdsFeature, Nil)
|
|
.filter(
|
|
candidateFeatures.getOrElse(PerspectiveFilteredLikedByUserIdsFeature, Nil).toSet.contains)
|
|
|
|
engagerSocialContextBuilder(
|
|
socialContextIds = validLikedByUserIds,
|
|
query = query,
|
|
candidateFeatures = candidateFeatures
|
|
)
|
|
}
|
|
}
|