mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-13 14:48:54 +02:00
617c8c787d
Unified User Action (UUA) is a centralized, real-time stream of user actions on Twitter, consumed by various product, ML, and marketing teams. UUA makes sure all internal teams consume the uniformed user actions data in an accurate and fast way.
42 lines
1.5 KiB
Scala
42 lines
1.5 KiB
Scala
package com.twitter.unified_user_actions.adapter.user_modification
|
|
|
|
import com.twitter.finagle.stats.NullStatsReceiver
|
|
import com.twitter.finagle.stats.StatsReceiver
|
|
import com.twitter.finatra.kafka.serde.UnKeyed
|
|
import com.twitter.gizmoduck.thriftscala.UserModification
|
|
import com.twitter.unified_user_actions.adapter.AbstractAdapter
|
|
import com.twitter.unified_user_actions.adapter.user_modification_event.UserCreate
|
|
import com.twitter.unified_user_actions.adapter.user_modification_event.UserUpdate
|
|
import com.twitter.unified_user_actions.thriftscala.UnifiedUserAction
|
|
|
|
class UserModificationAdapter
|
|
extends AbstractAdapter[UserModification, UnKeyed, UnifiedUserAction] {
|
|
|
|
import UserModificationAdapter._
|
|
|
|
override def adaptOneToKeyedMany(
|
|
input: UserModification,
|
|
statsReceiver: StatsReceiver = NullStatsReceiver
|
|
): Seq[(UnKeyed, UnifiedUserAction)] =
|
|
adaptEvent(input).map { e => (UnKeyed, e) }
|
|
}
|
|
|
|
object UserModificationAdapter {
|
|
|
|
def adaptEvent(input: UserModification): Seq[UnifiedUserAction] =
|
|
Option(input).toSeq.flatMap { e =>
|
|
if (e.create.isDefined) { // User create
|
|
Some(UserCreate.getUUA(input))
|
|
} else if (e.update.isDefined) { // User updates
|
|
Some(UserUpdate.getUUA(input))
|
|
} else if (e.destroy.isDefined) {
|
|
None
|
|
} else if (e.erase.isDefined) {
|
|
None
|
|
} else {
|
|
throw new IllegalArgumentException(
|
|
"None of the possible events is defined, there must be something with the source")
|
|
}
|
|
}
|
|
}
|