the-algorithm/visibilitylib/src/main/scala/com/twitter/visibility/builder/tweets/TrustedFriendsFeatures.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

58 lines
2.0 KiB
Scala

package com.twitter.visibility.builder.tweets
import com.twitter.stitch.Stitch
import com.twitter.tweetypie.thriftscala.Tweet
import com.twitter.visibility.builder.FeatureMapBuilder
import com.twitter.visibility.common.TrustedFriendsListId
import com.twitter.visibility.common.TrustedFriendsSource
import com.twitter.visibility.features.TweetIsTrustedFriendTweet
import com.twitter.visibility.features.ViewerIsTrustedFriendOfTweetAuthor
import com.twitter.visibility.features.ViewerIsTrustedFriendTweetAuthor
class TrustedFriendsFeatures(trustedFriendsSource: TrustedFriendsSource) {
private[builder] def viewerIsTrustedFriend(
tweet: Tweet,
viewerId: Option[Long]
): Stitch[Boolean] =
(trustedFriendsListId(tweet), viewerId) match {
case (Some(tfListId), Some(userId)) =>
trustedFriendsSource.isTrustedFriend(tfListId, userId)
case _ => Stitch.False
}
private[builder] def viewerIsTrustedFriendListOwner(
tweet: Tweet,
viewerId: Option[Long]
): Stitch[Boolean] =
(trustedFriendsListId(tweet), viewerId) match {
case (Some(tfListId), Some(userId)) =>
trustedFriendsSource.isTrustedFriendListOwner(tfListId, userId)
case _ => Stitch.False
}
private[builder] def trustedFriendsListId(tweet: Tweet): Option[TrustedFriendsListId] =
tweet.trustedFriendsControl.map(_.trustedFriendsListId)
def forTweet(
tweet: Tweet,
viewerId: Option[Long]
): FeatureMapBuilder => FeatureMapBuilder = {
_.withConstantFeature(
TweetIsTrustedFriendTweet,
tweet.trustedFriendsControl.isDefined
).withFeature(
ViewerIsTrustedFriendTweetAuthor,
viewerIsTrustedFriendListOwner(tweet, viewerId)
).withFeature(
ViewerIsTrustedFriendOfTweetAuthor,
viewerIsTrustedFriend(tweet, viewerId)
)
}
def forTweetOnly(tweet: Tweet): FeatureMapBuilder => FeatureMapBuilder = {
_.withConstantFeature(TweetIsTrustedFriendTweet, tweet.trustedFriendsControl.isDefined)
}
}