io.hackle.sdk.internal.event.dto.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hackle-server-sdk Show documentation
Show all versions of hackle-server-sdk Show documentation
Hackle SDK for Java and Kotlin
The newest version!
package io.hackle.sdk.internal.event
import io.hackle.sdk.core.event.UserEvent
import io.hackle.sdk.core.internal.utils.safe
import io.hackle.sdk.core.user.IdentifierType
internal data class EventPayloadDto(
val exposureEvents: List,
val trackEvents: List,
val remoteConfigEvents: List,
)
internal data class ExposureEventDto(
val insertId: String,
val timestamp: Long,
val userId: String?,
val identifiers: Map,
val userProperties: Map,
val hackleProperties: Map,
val experimentId: Long,
val experimentKey: Long,
val experimentType: String,
val experimentVersion: Int,
val variationId: Long?,
val variationKey: String,
val decisionReason: String,
val properties: Map,
)
internal data class TrackEventDto(
val insertId: String,
val timestamp: Long,
val userId: String?,
val identifiers: Map,
val userProperties: Map,
val hackleProperties: Map,
val eventTypeId: Long,
val eventTypeKey: String,
val value: Double?,
val properties: Map
)
internal data class RemoteConfigEventDto(
val insertId: String,
val timestamp: Long,
val userId: String?,
val identifiers: Map,
val userProperties: Map,
val hackleProperties: Map,
val parameterId: Long,
val parameterKey: String,
val parameterType: String,
val decisionReason: String,
val valueId: Long?,
val properties: Map
)
internal fun List.toPayload(): EventPayloadDto {
val exposures = mutableListOf()
val tracks = mutableListOf()
val remoteConfigEvents = mutableListOf()
for (event in this) {
when (event) {
is UserEvent.Exposure -> exposures += event.toDto()
is UserEvent.Track -> tracks += event.toDto()
is UserEvent.RemoteConfig -> remoteConfigEvents += event.toDto()
}.safe
}
return EventPayloadDto(
exposureEvents = exposures,
trackEvents = tracks,
remoteConfigEvents = remoteConfigEvents,
)
}
internal fun UserEvent.Exposure.toDto() = ExposureEventDto(
insertId = insertId,
timestamp = timestamp,
userId = user.identifiers[IdentifierType.ID.key],
identifiers = user.identifiers,
userProperties = user.properties,
hackleProperties = user.hackleProperties,
experimentId = experiment.id,
experimentKey = experiment.key,
experimentType = experiment.type.name,
experimentVersion = experiment.version,
variationId = variationId,
variationKey = variationKey,
decisionReason = decisionReason.name,
properties = properties
)
internal fun UserEvent.Track.toDto() = TrackEventDto(
insertId = insertId,
timestamp = timestamp,
userId = user.identifiers[IdentifierType.ID.key],
identifiers = user.identifiers,
userProperties = user.properties,
hackleProperties = user.hackleProperties,
eventTypeId = eventType.id,
eventTypeKey = eventType.key,
value = event.value,
properties = event.properties
)
internal fun UserEvent.RemoteConfig.toDto() = RemoteConfigEventDto(
insertId = insertId,
timestamp = timestamp,
userId = user.identifiers[IdentifierType.ID.key],
identifiers = user.identifiers,
userProperties = user.properties,
hackleProperties = user.hackleProperties,
parameterId = parameter.id,
parameterKey = parameter.key,
parameterType = parameter.type.name,
valueId = valueId,
decisionReason = decisionReason.name,
properties = properties
)