diff --git a/FlagsmithClient/src/main/java/com/flagsmith/Flagsmith.kt b/FlagsmithClient/src/main/java/com/flagsmith/Flagsmith.kt index 2e5602e..110dd67 100644 --- a/FlagsmithClient/src/main/java/com/flagsmith/Flagsmith.kt +++ b/FlagsmithClient/src/main/java/com/flagsmith/Flagsmith.kt @@ -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 @@ -148,11 +149,25 @@ class Flagsmith constructor( }.also { lastUsedIdentity = identity } fun setTrait(trait: Trait, identity: String, result: (Result) -> 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, identity: String, result: (Result>) -> 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) -> Unit) = diff --git a/FlagsmithClient/src/main/java/com/flagsmith/entities/IdentityAndTraits.kt b/FlagsmithClient/src/main/java/com/flagsmith/entities/IdentityAndTraits.kt new file mode 100644 index 0000000..c626f5b --- /dev/null +++ b/FlagsmithClient/src/main/java/com/flagsmith/entities/IdentityAndTraits.kt @@ -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 +) \ No newline at end of file diff --git a/FlagsmithClient/src/main/java/com/flagsmith/internal/FlagsmithRetrofitService.kt b/FlagsmithClient/src/main/java/com/flagsmith/internal/FlagsmithRetrofitService.kt index 0a296e6..9337d73 100644 --- a/FlagsmithClient/src/main/java/com/flagsmith/internal/FlagsmithRetrofitService.kt +++ b/FlagsmithClient/src/main/java/com/flagsmith/internal/FlagsmithRetrofitService.kt @@ -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 @@ -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 { @@ -25,11 +24,8 @@ interface FlagsmithRetrofitService { @GET("flags/") fun getFlags() : Call> - @POST("traits/") - fun postTrait(@Body trait: TraitWithIdentity) : Call - - @PUT("traits/bulk/") - fun postTraits(@Body traits: List) : Call> + @POST("identities/") + fun postTraits(@Body identity: IdentityAndTraits) : Call @POST("analytics/flags/") fun postAnalytics(@Body eventMap: Map) : Call diff --git a/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/MockResponses.kt b/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/MockResponses.kt index 5549635..9dc70e7 100644 --- a/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/MockResponses.kt +++ b/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/MockResponses.kt @@ -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() diff --git a/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsBulkEndpoint.kt b/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsBulkEndpoint.kt index 88ba6d3..0beef39 100644 --- a/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsBulkEndpoint.kt +++ b/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsBulkEndpoint.kt @@ -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, private val identity: String) : PostEndpoint( - 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 + ) ), ) \ No newline at end of file diff --git a/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsEndpoint.kt b/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsEndpoint.kt index 366d833..ab371b3 100644 --- a/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsEndpoint.kt +++ b/FlagsmithClient/src/test/java/com/flagsmith/mockResponses/endpoints/TraitsEndpoint.kt @@ -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( - path = "/traits/", + path = "/identities/", body = Gson().toJson( - TraitWithIdentity( - key = trait.key, - traitValue = trait.traitValue, - identity = Identity(identity) + IdentityAndTraits( + identifier = identity, + traits = listOf(trait) ) ), ) \ No newline at end of file