the-algorithm/home-mixer/server/src/main/scala/com/twitter/home_mixer/controller/HomeThriftController.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
)
}
}