All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.hackle.sdk.internal.event.dto.kt Maven / Gradle / Ivy

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
)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy