mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-01 08:48:46 +02:00
01dbfee4c0
Tweetypie is the core Tweet service that handles the reading and writing of Tweet data.
47 lines
1.7 KiB
Scala
47 lines
1.7 KiB
Scala
package com.twitter.tweetypie
|
|
package handler
|
|
|
|
import com.twitter.tweetypie.store.UpdatePossiblySensitiveTweet
|
|
import com.twitter.tweetypie.thriftscala.UpdatePossiblySensitiveTweetRequest
|
|
import com.twitter.tweetypie.util.TweetLenses
|
|
|
|
object UpdatePossiblySensitiveTweetHandler {
|
|
type Type = FutureArrow[UpdatePossiblySensitiveTweetRequest, Unit]
|
|
|
|
def apply(
|
|
tweetGetter: FutureArrow[TweetId, Tweet],
|
|
userGetter: FutureArrow[UserId, User],
|
|
updatePossiblySensitiveTweetStore: FutureEffect[UpdatePossiblySensitiveTweet.Event]
|
|
): Type =
|
|
FutureArrow { request =>
|
|
val nsfwAdminMutation = Mutation[Boolean](_ => request.nsfwAdmin).checkEq
|
|
val nsfwUserMutation = Mutation[Boolean](_ => request.nsfwUser).checkEq
|
|
val tweetMutation =
|
|
TweetLenses.nsfwAdmin
|
|
.mutation(nsfwAdminMutation)
|
|
.also(TweetLenses.nsfwUser.mutation(nsfwUserMutation))
|
|
|
|
for {
|
|
originalTweet <- tweetGetter(request.tweetId)
|
|
_ <- tweetMutation(originalTweet) match {
|
|
case None => Future.Unit
|
|
case Some(mutatedTweet) =>
|
|
userGetter(getUserId(originalTweet))
|
|
.map { user =>
|
|
UpdatePossiblySensitiveTweet.Event(
|
|
tweet = mutatedTweet,
|
|
user = user,
|
|
timestamp = Time.now,
|
|
byUserId = request.byUserId,
|
|
nsfwAdminChange = nsfwAdminMutation(TweetLenses.nsfwAdmin.get(originalTweet)),
|
|
nsfwUserChange = nsfwUserMutation(TweetLenses.nsfwUser.get(originalTweet)),
|
|
note = request.note,
|
|
host = request.host
|
|
)
|
|
}
|
|
.flatMap(updatePossiblySensitiveTweetStore)
|
|
}
|
|
} yield ()
|
|
}
|
|
}
|