mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-01 08:48:46 +02:00
b389c3d302
Pushservice is the main recommendation service we use to surface recommendations to our users via notifications. It fetches candidates from various sources, ranks them in order of relevance, and applies filters to determine the best one to send.
87 lines
3.5 KiB
Scala
87 lines
3.5 KiB
Scala
package com.twitter.frigate.pushservice.model
|
|
|
|
import com.twitter.finagle.stats.StatsReceiver
|
|
import com.twitter.frigate.common.base.ScheduledSpaceSubscriberCandidate
|
|
import com.twitter.frigate.common.base.SpaceCandidateFanoutDetails
|
|
import com.twitter.frigate.common.util.FeatureSwitchParams
|
|
import com.twitter.frigate.magic_events.thriftscala.SpaceMetadata
|
|
import com.twitter.frigate.pushservice.model.PushTypes.PushCandidate
|
|
import com.twitter.frigate.pushservice.model.PushTypes.RawCandidate
|
|
import com.twitter.frigate.pushservice.model.PushTypes.Target
|
|
import com.twitter.frigate.pushservice.config.Config
|
|
import com.twitter.frigate.pushservice.ml.PushMLModelScorer
|
|
import com.twitter.frigate.pushservice.model.candidate.CopyIds
|
|
import com.twitter.frigate.pushservice.model.ibis.ScheduledSpaceSubscriberIbis2Hydrator
|
|
import com.twitter.frigate.pushservice.model.ntab.ScheduledSpaceSubscriberNTabRequestHydrator
|
|
import com.twitter.frigate.pushservice.predicate._
|
|
import com.twitter.frigate.pushservice.take.predicates.BasicSendHandlerPredicates
|
|
import com.twitter.frigate.thriftscala.FrigateNotification
|
|
import com.twitter.gizmoduck.thriftscala.User
|
|
import com.twitter.hermit.predicate.NamedPredicate
|
|
import com.twitter.storehaus.ReadableStore
|
|
import com.twitter.ubs.thriftscala.AudioSpace
|
|
import com.twitter.util.Future
|
|
|
|
class ScheduledSpaceSubscriberPushCandidate(
|
|
candidate: RawCandidate with ScheduledSpaceSubscriberCandidate,
|
|
hostUser: Option[User],
|
|
copyIds: CopyIds,
|
|
audioSpaceStore: ReadableStore[String, AudioSpace]
|
|
)(
|
|
implicit val statsScoped: StatsReceiver,
|
|
pushModelScorer: PushMLModelScorer)
|
|
extends PushCandidate
|
|
with ScheduledSpaceSubscriberCandidate
|
|
with SpaceCandidateFanoutDetails
|
|
with ScheduledSpaceSubscriberIbis2Hydrator
|
|
with ScheduledSpaceSubscriberNTabRequestHydrator {
|
|
|
|
override val startTime: Long = candidate.startTime
|
|
|
|
override val hydratedHost: Option[User] = hostUser
|
|
|
|
override val spaceId: String = candidate.spaceId
|
|
|
|
override val hostId: Option[Long] = candidate.hostId
|
|
|
|
override val speakerIds: Option[Seq[Long]] = candidate.speakerIds
|
|
|
|
override val listenerIds: Option[Seq[Long]] = candidate.listenerIds
|
|
|
|
override val frigateNotification: FrigateNotification = candidate.frigateNotification
|
|
|
|
override val pushCopyId: Option[Int] = copyIds.pushCopyId
|
|
|
|
override val ntabCopyId: Option[Int] = copyIds.ntabCopyId
|
|
|
|
override val copyAggregationId: Option[String] = copyIds.aggregationId
|
|
|
|
override val target: Target = candidate.target
|
|
|
|
override lazy val audioSpaceFut: Future[Option[AudioSpace]] = audioSpaceStore.get(spaceId)
|
|
|
|
override val spaceFanoutMetadata: Option[SpaceMetadata] = None
|
|
|
|
override val weightedOpenOrNtabClickModelScorer: PushMLModelScorer = pushModelScorer
|
|
|
|
override val statsReceiver: StatsReceiver =
|
|
statsScoped.scope("ScheduledSpaceSubscriberCandidate")
|
|
}
|
|
|
|
case class ScheduledSpaceSubscriberCandidatePredicates(config: Config)
|
|
extends BasicSendHandlerPredicates[ScheduledSpaceSubscriberPushCandidate] {
|
|
|
|
implicit val statsReceiver: StatsReceiver = config.statsReceiver.scope(getClass.getSimpleName)
|
|
|
|
override val preCandidateSpecificPredicates: List[
|
|
NamedPredicate[ScheduledSpaceSubscriberPushCandidate]
|
|
] =
|
|
List(
|
|
PredicatesForCandidate.paramPredicate(FeatureSwitchParams.EnableScheduledSpaceSubscribers),
|
|
SpacePredicate.narrowCastSpace,
|
|
SpacePredicate.targetInSpace(config.audioSpaceParticipantsStore),
|
|
SpacePredicate.spaceHostTargetUserBlocking(config.edgeStore),
|
|
PredicatesForCandidate.duplicateSpacesPredicate
|
|
)
|
|
}
|