mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-09-20 22:19:50 +02:00
52 lines
2.9 KiB
Scala
52 lines
2.9 KiB
Scala
package com.twitter.home_mixer.functional_component.decorator
|
|
|
|
import com.twitter.home_mixer.functional_component.decorator.builder.HomeConversationModuleMetadataBuilder
|
|
import com.twitter.home_mixer.functional_component.decorator.builder.HomeTimelinesScoreInfoBuilder
|
|
import com.twitter.home_mixer.functional_component.decorator.urt.builder.HomeFeedbackActionInfoBuilder
|
|
import com.twitter.home_mixer.model.HomeFeatures.ConversationModuleFocalTweetIdFeature
|
|
import com.twitter.product_mixer.component_library.decorator.urt.UrtItemCandidateDecorator
|
|
import com.twitter.product_mixer.component_library.decorator.urt.UrtMultipleModulesDecorator
|
|
import com.twitter.product_mixer.component_library.decorator.urt.builder.item.tweet.TweetCandidateUrtItemBuilder
|
|
import com.twitter.product_mixer.component_library.decorator.urt.builder.metadata.ClientEventInfoBuilder
|
|
import com.twitter.product_mixer.component_library.decorator.urt.builder.timeline_module.StaticModuleDisplayTypeBuilder
|
|
import com.twitter.product_mixer.component_library.decorator.urt.builder.timeline_module.TimelineModuleBuilder
|
|
import com.twitter.product_mixer.component_library.model.candidate.TweetCandidate
|
|
import com.twitter.product_mixer.core.model.marshalling.response.urt.EntryNamespace
|
|
import com.twitter.product_mixer.core.model.marshalling.response.urt.timeline_module.VerticalConversation
|
|
import com.twitter.product_mixer.core.pipeline.PipelineQuery
|
|
import com.twitter.timelines.injection.scribe.InjectionScribeUtil
|
|
import com.twitter.timelineservice.suggests.{thriftscala => st}
|
|
|
|
object HomeConversationServiceCandidateDecorator {
|
|
|
|
private val ConversationModuleNamespace = EntryNamespace("home-conversation")
|
|
|
|
def apply(
|
|
homeFeedbackActionInfoBuilder: HomeFeedbackActionInfoBuilder
|
|
): Some[UrtMultipleModulesDecorator[PipelineQuery, TweetCandidate, Long]] = {
|
|
val suggestType = st.SuggestType.RankedOrganicTweet
|
|
val component = InjectionScribeUtil.scribeComponent(suggestType).get
|
|
val clientEventInfoBuilder = ClientEventInfoBuilder(component)
|
|
val tweetItemBuilder = TweetCandidateUrtItemBuilder(
|
|
clientEventInfoBuilder = clientEventInfoBuilder,
|
|
timelinesScoreInfoBuilder = Some(HomeTimelinesScoreInfoBuilder),
|
|
feedbackActionInfoBuilder = Some(homeFeedbackActionInfoBuilder)
|
|
)
|
|
|
|
val moduleBuilder = TimelineModuleBuilder(
|
|
entryNamespace = ConversationModuleNamespace,
|
|
clientEventInfoBuilder = clientEventInfoBuilder,
|
|
displayTypeBuilder = StaticModuleDisplayTypeBuilder(VerticalConversation),
|
|
metadataBuilder = Some(HomeConversationModuleMetadataBuilder())
|
|
)
|
|
|
|
Some(
|
|
UrtMultipleModulesDecorator(
|
|
urtItemCandidateDecorator = UrtItemCandidateDecorator(tweetItemBuilder),
|
|
moduleBuilder = moduleBuilder,
|
|
groupByKey = (_, _, candidateFeatures) =>
|
|
candidateFeatures.getOrElse(ConversationModuleFocalTweetIdFeature, None)
|
|
))
|
|
}
|
|
}
|