the-algorithm/tweetypie/common/src/scala/com/twitter/tweetypie/storage/StatusConversions.scala

130 lines
4.1 KiB
Scala

package com.twitter.tweetypie.storage
import com.twitter.tweetypie.storage_internal.thriftscala._
import com.twitter.tbird.{thriftscala => tbird}
object StatusConversions {
/**
* This is used only in Scribe.scala, when scribing to tbird_add_status
* Once we remove that, we can also remove this.
*/
def toTBirdStatus(tweet: StoredTweet): tbird.Status =
tbird.Status(
id = tweet.id,
userId = tweet.userId.get,
text = tweet.text.get,
createdVia = tweet.createdVia.get,
createdAtSec = tweet.createdAtSec.get,
reply = tweet.reply.map(toTBirdReply),
share = tweet.share.map(toTBirdShare),
contributorId = tweet.contributorId,
geo = tweet.geo.map(toTBirdGeo),
hasTakedown = tweet.hasTakedown.getOrElse(false),
nsfwUser = tweet.nsfwUser.getOrElse(false),
nsfwAdmin = tweet.nsfwAdmin.getOrElse(false),
media = tweet.media.map(_.map(toTBirdMedia)).getOrElse(Seq()),
narrowcast = tweet.narrowcast.map(toTBirdNarrowcast),
nullcast = tweet.nullcast.getOrElse(false),
trackingId = tweet.trackingId
)
/**
* This is only used in a test, to verify that the above method `toTBirdStatus`
* works, so we can't remove it as long as the above method exists.
*/
def fromTBirdStatus(status: tbird.Status): StoredTweet = {
StoredTweet(
id = status.id,
userId = Some(status.userId),
text = Some(status.text),
createdVia = Some(status.createdVia),
createdAtSec = Some(status.createdAtSec),
reply = status.reply.map(fromTBirdReply),
share = status.share.map(fromTBirdShare),
contributorId = status.contributorId,
geo = status.geo.map(fromTBirdGeo),
hasTakedown = Some(status.hasTakedown),
nsfwUser = Some(status.nsfwUser),
nsfwAdmin = Some(status.nsfwAdmin),
media = Some(status.media.map(fromTBirdMedia)),
narrowcast = status.narrowcast.map(fromTBirdNarrowcast),
nullcast = Some(status.nullcast),
trackingId = status.trackingId
)
}
private def fromTBirdReply(reply: tbird.Reply): StoredReply =
StoredReply(
inReplyToStatusId = reply.inReplyToStatusId,
inReplyToUserId = reply.inReplyToUserId
)
private def fromTBirdShare(share: tbird.Share): StoredShare =
StoredShare(
sourceStatusId = share.sourceStatusId,
sourceUserId = share.sourceUserId,
parentStatusId = share.parentStatusId
)
private def fromTBirdGeo(geo: tbird.Geo): StoredGeo =
StoredGeo(
latitude = geo.latitude,
longitude = geo.longitude,
geoPrecision = geo.geoPrecision,
entityId = geo.entityId
)
private def fromTBirdMedia(media: tbird.MediaEntity): StoredMediaEntity =
StoredMediaEntity(
id = media.id,
mediaType = media.mediaType,
width = media.width,
height = media.height
)
private def fromTBirdNarrowcast(narrowcast: tbird.Narrowcast): StoredNarrowcast =
StoredNarrowcast(
language = Some(narrowcast.language),
location = Some(narrowcast.location),
ids = Some(narrowcast.ids)
)
private def toTBirdReply(reply: StoredReply): tbird.Reply =
tbird.Reply(
inReplyToStatusId = reply.inReplyToStatusId,
inReplyToUserId = reply.inReplyToUserId
)
private def toTBirdShare(share: StoredShare): tbird.Share =
tbird.Share(
sourceStatusId = share.sourceStatusId,
sourceUserId = share.sourceUserId,
parentStatusId = share.parentStatusId
)
private def toTBirdGeo(geo: StoredGeo): tbird.Geo =
tbird.Geo(
latitude = geo.latitude,
longitude = geo.longitude,
geoPrecision = geo.geoPrecision,
entityId = geo.entityId,
name = geo.name
)
private def toTBirdMedia(media: StoredMediaEntity): tbird.MediaEntity =
tbird.MediaEntity(
id = media.id,
mediaType = media.mediaType,
width = media.width,
height = media.height
)
private def toTBirdNarrowcast(narrowcast: StoredNarrowcast): tbird.Narrowcast =
tbird.Narrowcast(
language = narrowcast.language.getOrElse(Nil),
location = narrowcast.location.getOrElse(Nil),
ids = narrowcast.ids.getOrElse(Nil)
)
}