the-algorithm/tweetypie/server/src/main/scala/com/twitter/tweetypie/handler/UpdatePossiblySensitiveTweetHandler.scala
twitter-team 01dbfee4c0 Open-sourcing Tweetypie
Tweetypie is the core Tweet service that handles the reading and writing of Tweet data.
2023-05-19 16:20:06 -05:00

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 ()
}
}