Skip to content

Commit

Permalink
Changed API for bulk traits update (#48)
Browse files Browse the repository at this point in the history
  • Loading branch information
devapro committed Apr 29, 2024
1 parent 027cc76 commit a9077c4
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 51 deletions.
21 changes: 18 additions & 3 deletions FlagsmithClient/src/main/java/com/flagsmith/Flagsmith.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import android.util.Log
import com.flagsmith.entities.Flag
import com.flagsmith.entities.Identity
import com.flagsmith.entities.IdentityAndTraits
import com.flagsmith.entities.IdentityFlagsAndTraits
import com.flagsmith.entities.Trait
import com.flagsmith.entities.TraitWithIdentity
Expand Down Expand Up @@ -148,11 +149,25 @@ class Flagsmith constructor(
}.also { lastUsedIdentity = identity }

fun setTrait(trait: Trait, identity: String, result: (Result<TraitWithIdentity>) -> Unit) =
retrofit.postTrait(TraitWithIdentity(trait.key, trait.traitValue, Identity(identity))).enqueueWithResult(result = result)
retrofit.postTraits(IdentityAndTraits(identity, listOf(trait)))
.enqueueWithResult(result = {
result(it.map { response -> TraitWithIdentity(
key = response.traits.first().key,
traitValue = response.traits.first().traitValue,
identity = Identity(identity)
)})
})

fun setTraits(traits: List<Trait>, identity: String, result: (Result<List<TraitWithIdentity>>) -> Unit) {
val request = traits.map { TraitWithIdentity(it.key, it.traitValue, Identity(identity)) }
retrofit.postTraits(request).enqueueWithResult(result = result)
retrofit.postTraits(IdentityAndTraits(identity, traits)).enqueueWithResult(result = {
result(it.map { response -> response.traits.map { trait ->
TraitWithIdentity(
key = trait.key,
traitValue = trait.traitValue,
identity = Identity(identity)
)
}})
})
}

fun getIdentity(identity: String, result: (Result<IdentityFlagsAndTraits>) -> Unit) =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.flagsmith.entities

import com.google.gson.annotations.SerializedName

data class IdentityAndTraits(
@SerializedName(value = "identifier") val identifier: String,
@SerializedName(value = "traits") val traits: List<Trait>
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import android.content.Context
import android.util.Log
import com.flagsmith.FlagsmithCacheConfig
import com.flagsmith.entities.Flag
import com.flagsmith.entities.IdentityAndTraits
import com.flagsmith.entities.IdentityFlagsAndTraits
import com.flagsmith.entities.TraitWithIdentity
import okhttp3.Cache
import okhttp3.Interceptor
import okhttp3.OkHttpClient
Expand All @@ -14,7 +14,6 @@ import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Query

interface FlagsmithRetrofitService {
Expand All @@ -25,11 +24,8 @@ interface FlagsmithRetrofitService {
@GET("flags/")
fun getFlags() : Call<List<Flag>>

@POST("traits/")
fun postTrait(@Body trait: TraitWithIdentity) : Call<TraitWithIdentity>

@PUT("traits/bulk/")
fun postTraits(@Body traits: List<TraitWithIdentity>) : Call<List<TraitWithIdentity>>
@POST("identities/")
fun postTraits(@Body identity: IdentityAndTraits) : Call<IdentityFlagsAndTraits>

@POST("analytics/flags/")
fun postAnalytics(@Body eventMap: Map<String, Int?>) : Call<Unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,53 +160,66 @@ object MockResponses {

val setTrait = """
{
"trait_key": "set-from-client",
"trait_value": "12345",
"identity": {
"identifier": "person"
}
"identifier": "person",
"flags": [],
"traits": [
{
"trait_value": "12345",
"trait_key": "set-from-client"
}
]
}
""".trimIndent()

val setTraits = """
[
{
"identifier": "person",
"flags": [],
"traits": [
{
"trait_key": "set-from-client",
"trait_value": "12345",
"identity": {
"identifier": "person"
}
"trait_key": "set-from-client"
}
]
]
}
""".trimIndent()

val setTraitInteger = """
{
"trait_key": "set-from-client",
"trait_value": 5,
"identity": {
"identifier": "person"
}
"identifier": "person",
"flags": [],
"traits": [
{
"trait_value": 5,
"trait_key": "set-from-client"
}
]
}
""".trimIndent()

val setTraitDouble = """
{
"trait_key": "set-from-client",
"trait_value": 0.5,
"identity": {
"identifier": "person"
}
"identifier": "person",
"flags": [],
"traits": [
{
"trait_value": 0.5,
"trait_key": "set-from-client"
}
]
}
""".trimIndent()

val setTraitBoolean = """
{
"trait_key": "set-from-client",
"trait_value": true,
"identity": {
"identifier": "person"
}
"identifier": "person",
"flags": [],
"traits": [
{
"trait_value": true,
"trait_key": "set-from-client"
}
]
}
""".trimIndent()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,17 @@
package com.flagsmith.mockResponses.endpoints

import com.flagsmith.entities.Identity
import com.flagsmith.entities.IdentityAndTraits
import com.flagsmith.entities.Trait
import com.flagsmith.entities.TraitWithIdentity
import com.google.gson.Gson

data class TraitsBulkEndpoint(private val traits: List<Trait>, private val identity: String) :
PostEndpoint<TraitWithIdentity>(
path = "/traits/bulk/",
path = "/identities/",
body = Gson().toJson(
traits.map {
TraitWithIdentity(
key = it.key,
traitValue = it.traitValue,
identity = Identity(identity)
)
}
IdentityAndTraits(
identifier = identity,
traits = traits
)
),
)
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
package com.flagsmith.mockResponses.endpoints

import com.flagsmith.entities.Identity
import com.flagsmith.entities.IdentityAndTraits
import com.flagsmith.entities.Trait
import com.flagsmith.entities.TraitWithIdentity
import com.google.gson.Gson

data class TraitsEndpoint(private val trait: Trait, private val identity: String) :
PostEndpoint<TraitWithIdentity>(
path = "/traits/",
path = "/identities/",
body = Gson().toJson(
TraitWithIdentity(
key = trait.key,
traitValue = trait.traitValue,
identity = Identity(identity)
IdentityAndTraits(
identifier = identity,
traits = listOf(trait)
)
),
)

0 comments on commit a9077c4

Please sign in to comment.