50 lines
1.6 KiB
Scala
50 lines
1.6 KiB
Scala
package com.twitter.tweetypie
|
|
package repository
|
|
|
|
import com.twitter.search.blender.services.strato.UserSearchSafetySettings
|
|
import com.twitter.spam.rtf.thriftscala.SafetyLabel
|
|
import com.twitter.spam.rtf.thriftscala.SafetyLabelMap
|
|
import com.twitter.spam.rtf.thriftscala.SafetyLabelType
|
|
import com.twitter.stitch.Stitch
|
|
import com.twitter.strato.client.Fetcher
|
|
import com.twitter.strato.client.{Client => StratoClient}
|
|
import com.twitter.strato.thrift.ScroogeConvImplicits._
|
|
import com.twitter.visibility.common.UserSearchSafetySource
|
|
|
|
object StratoSafetyLabelsRepository {
|
|
type Type = (TweetId, SafetyLabelType) => Stitch[Option[SafetyLabel]]
|
|
|
|
def apply(client: StratoClient): Type = {
|
|
val safetyLabelMapRepo = StratoSafetyLabelMapRepository(client)
|
|
|
|
(tweetId, safetyLabelType) =>
|
|
safetyLabelMapRepo(tweetId).map(
|
|
_.flatMap(_.labels).flatMap(_.get(safetyLabelType))
|
|
)
|
|
}
|
|
}
|
|
|
|
object StratoSafetyLabelMapRepository {
|
|
type Type = TweetId => Stitch[Option[SafetyLabelMap]]
|
|
|
|
val column = "visibility/baseTweetSafetyLabelMap"
|
|
|
|
def apply(client: StratoClient): Type = {
|
|
val fetcher: Fetcher[TweetId, Unit, SafetyLabelMap] =
|
|
client.fetcher[TweetId, SafetyLabelMap](column)
|
|
|
|
tweetId => fetcher.fetch(tweetId).map(_.v)
|
|
}
|
|
}
|
|
|
|
object StratoUserSearchSafetySourceRepository {
|
|
type Type = UserId => Stitch[UserSearchSafetySettings]
|
|
|
|
def apply(client: StratoClient): Type = {
|
|
val fetcher: Fetcher[UserId, Unit, UserSearchSafetySettings] =
|
|
client.fetcher[UserId, UserSearchSafetySettings](UserSearchSafetySource.Column)
|
|
|
|
userId => fetcher.fetch(userId).map(_.v.getOrElse(UserSearchSafetySource.DefaultSetting))
|
|
}
|
|
}
|