mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-05 18:58:45 +02:00
52 lines
2.2 KiB
Scala
52 lines
2.2 KiB
Scala
package com.twitter.home_mixer.controller
|
|
|
|
import com.twitter.finatra.thrift.Controller
|
|
import com.twitter.home_mixer.marshaller.request.HomeMixerRequestUnmarshaller
|
|
import com.twitter.home_mixer.model.request.HomeMixerRequest
|
|
import com.twitter.home_mixer.service.ScoredTweetsService
|
|
import com.twitter.home_mixer.{thriftscala => t}
|
|
import com.twitter.product_mixer.core.controllers.DebugTwitterContext
|
|
import com.twitter.product_mixer.core.functional_component.configapi.ParamsBuilder
|
|
import com.twitter.product_mixer.core.service.debug_query.DebugQueryService
|
|
import com.twitter.product_mixer.core.service.urt.UrtService
|
|
import com.twitter.snowflake.id.SnowflakeId
|
|
import com.twitter.stitch.Stitch
|
|
import com.twitter.timelines.configapi.Params
|
|
import javax.inject.Inject
|
|
|
|
class HomeThriftController @Inject() (
|
|
homeRequestUnmarshaller: HomeMixerRequestUnmarshaller,
|
|
urtService: UrtService,
|
|
scoredTweetsService: ScoredTweetsService,
|
|
paramsBuilder: ParamsBuilder)
|
|
extends Controller(t.HomeMixer)
|
|
with DebugTwitterContext {
|
|
|
|
handle(t.HomeMixer.GetUrtResponse) { args: t.HomeMixer.GetUrtResponse.Args =>
|
|
val request = homeRequestUnmarshaller(args.request)
|
|
val params = buildParams(request)
|
|
Stitch.run(urtService.getUrtResponse[HomeMixerRequest](request, params))
|
|
}
|
|
|
|
handle(t.HomeMixer.GetScoredTweetsResponse) { args: t.HomeMixer.GetScoredTweetsResponse.Args =>
|
|
val request = homeRequestUnmarshaller(args.request)
|
|
val params = buildParams(request)
|
|
withDebugTwitterContext(request.clientContext) {
|
|
Stitch.run(scoredTweetsService.getScoredTweetsResponse[HomeMixerRequest](request, params))
|
|
}
|
|
}
|
|
|
|
private def buildParams(request: HomeMixerRequest): Params = {
|
|
val userAgeOpt = request.clientContext.userId.map { userId =>
|
|
SnowflakeId.timeFromIdOpt(userId).map(_.untilNow.inDays).getOrElse(Int.MaxValue)
|
|
}
|
|
val fsCustomMapInput = userAgeOpt.map("account_age_in_days" -> _).toMap
|
|
paramsBuilder.build(
|
|
clientContext = request.clientContext,
|
|
product = request.product,
|
|
featureOverrides = request.debugParams.flatMap(_.featureOverrides).getOrElse(Map.empty),
|
|
fsCustomMapInput = fsCustomMapInput
|
|
)
|
|
}
|
|
}
|