the-algorithm/home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/selector/UpdateConversationModuleId.scala
twitter-team ef4c5eb65e Twitter Recommendation Algorithm
Please note we have force-pushed a new initial commit in order to remove some publicly-available Twitter user information. Note that this process may be required in the future.
2023-03-31 17:36:31 -05:00

41 lines
1.8 KiB
Scala

package com.twitter.home_mixer.functional_component.selector
import com.twitter.product_mixer.component_library.model.presentation.urt.UrtModulePresentation
import com.twitter.product_mixer.core.functional_component.common.CandidateScope
import com.twitter.product_mixer.core.functional_component.common.CandidateScope.PartitionedCandidates
import com.twitter.product_mixer.core.functional_component.selector.Selector
import com.twitter.product_mixer.core.functional_component.selector.SelectorResult
import com.twitter.product_mixer.core.model.common.presentation.CandidateWithDetails
import com.twitter.product_mixer.core.model.common.presentation.ModuleCandidateWithDetails
import com.twitter.product_mixer.core.pipeline.PipelineQuery
/**
* This selector updates the id of the conversation modules to be the head of the module's id.
*/
case class UpdateConversationModuleId(
override val pipelineScope: CandidateScope)
extends Selector[PipelineQuery] {
override def apply(
query: PipelineQuery,
remainingCandidates: Seq[CandidateWithDetails],
result: Seq[CandidateWithDetails]
): SelectorResult = {
val PartitionedCandidates(selectedCandidates, otherCandidates) =
pipelineScope.partition(remainingCandidates)
val updatedCandidates = selectedCandidates.map {
case module @ ModuleCandidateWithDetails(candidates, presentationOpt, _) =>
val updatedPresentation = presentationOpt.map {
case urtModule @ UrtModulePresentation(timelineModule) =>
urtModule.copy(timelineModule =
timelineModule.copy(id = candidates.head.candidateIdLong))
}
module.copy(presentation = updatedPresentation)
case candidate => candidate
}
SelectorResult(remainingCandidates = updatedCandidates ++ otherCandidates, result = result)
}
}