43 lines
1.8 KiB
Scala
43 lines
1.8 KiB
Scala
package com.twitter.home_mixer.functional_component.decorator.urt.builder
|
|
|
|
import com.twitter.home_mixer.model.HomeFeatures.InNetworkFeature
|
|
import com.twitter.home_mixer.model.HomeFeatures.TopicContextFunctionalityTypeFeature
|
|
import com.twitter.home_mixer.model.HomeFeatures.TopicIdSocialContextFeature
|
|
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.SocialContext
|
|
import com.twitter.product_mixer.core.model.marshalling.response.urt.metadata.TopicContext
|
|
import com.twitter.product_mixer.core.pipeline.PipelineQuery
|
|
import javax.inject.Inject
|
|
import javax.inject.Singleton
|
|
|
|
@Singleton
|
|
case class TopicSocialContextBuilder @Inject() ()
|
|
extends BaseSocialContextBuilder[PipelineQuery, TweetCandidate] {
|
|
|
|
def apply(
|
|
query: PipelineQuery,
|
|
candidate: TweetCandidate,
|
|
candidateFeatures: FeatureMap
|
|
): Option[SocialContext] = {
|
|
val inNetwork = candidateFeatures.getOrElse(InNetworkFeature, true)
|
|
if (!inNetwork) {
|
|
val topicIdSocialContextOpt = candidateFeatures.getOrElse(TopicIdSocialContextFeature, None)
|
|
val topicContextFunctionalityTypeOpt =
|
|
candidateFeatures.getOrElse(TopicContextFunctionalityTypeFeature, None)
|
|
(topicIdSocialContextOpt, topicContextFunctionalityTypeOpt) match {
|
|
case (Some(topicId), Some(topicContextFunctionalityType)) =>
|
|
Some(
|
|
TopicContext(
|
|
topicId = topicId.toString,
|
|
functionalityType = Some(topicContextFunctionalityType)
|
|
))
|
|
case _ => None
|
|
}
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
}
|