mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-27 13:36:03 +02:00
ef4c5eb65e
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.
41 lines
1.8 KiB
Scala
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)
|
|
}
|
|
}
|