Skip to content

Commit 48ac1e4

Browse files
committed
Add hasPendingMapping to MultiCluster endpoints
1 parent 40b5216 commit 48ac1e4

File tree

6 files changed

+42
-0
lines changed

6 files changed

+42
-0
lines changed

src/commonMain/kotlin/com/algolia/search/endpoint/EndpointMultiCluster.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,4 +114,13 @@ public interface EndpointMultiCluster {
114114
clusterName: ClusterName,
115115
requestOptions: RequestOptions? = null
116116
): Creation
117+
118+
/**
119+
* @param retrieveMapping If set to true, retrieves [ResponseHasPendingMapping.clusters].
120+
* @param requestOptions Configure request locally with [RequestOptions].
121+
*/
122+
suspend fun hasPendingMapping(
123+
retrieveMapping: Boolean = false,
124+
requestOptions: RequestOptions? = null
125+
): ResponseHasPendingMapping
117126
}

src/commonMain/kotlin/com/algolia/search/endpoint/EndpointMulticlusterImpl.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,16 @@ internal class EndpointMulticlusterImpl(
8989

9090
return transport.request(HttpMethod.Post, CallType.Write, path, requestOptions, body)
9191
}
92+
93+
override suspend fun hasPendingMapping(
94+
retrieveMapping: Boolean,
95+
requestOptions: RequestOptions?
96+
): ResponseHasPendingMapping {
97+
val path = "$RouteClustersV1/mapping/pending"
98+
val options = requestOptionsBuilder(requestOptions) {
99+
parameter(KeyGetClusters, retrieveMapping)
100+
}
101+
102+
return transport.request(HttpMethod.Get, CallType.Read, path, options)
103+
}
92104
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.algolia.search.model.response
2+
3+
import com.algolia.search.model.multicluster.ClusterName
4+
import com.algolia.search.model.multicluster.UserID
5+
import kotlinx.serialization.SerialName
6+
import kotlinx.serialization.Serializable
7+
import com.algolia.search.serialize.KeyPending
8+
import com.algolia.search.serialize.KeyClusters
9+
10+
11+
@Serializable
12+
public data class ResponseHasPendingMapping(
13+
@SerialName(KeyPending) val isPending: Boolean,
14+
@SerialName(KeyClusters) val clusters: Map<ClusterName, List<UserID>>? = null
15+
)

src/commonMain/kotlin/com/algolia/search/serialize/KeysTwo.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,5 @@ public const val KeyIndexLanguages = "indexLanguages"
171171
public const val KeyCustomNormalization = "customNormalization"
172172
public const val KeyFilterPromotes = "filterPromotes"
173173
public const val KeyUsers = "users"
174+
public const val KeyPending = "pending"
175+
public const val KeyGetClusters = "getClusters"

src/commonTest/kotlin/serialize/TestKeys.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,5 +358,7 @@ internal class TestKeys {
358358
KeyCustomNormalization shouldEqual "customNormalization"
359359
KeyFilterPromotes shouldEqual "filterPromotes"
360360
KeyUsers shouldEqual "users"
361+
KeyPending shouldEqual "pending"
362+
KeyGetClusters shouldEqual "getClusters"
361363
}
362364
}

src/commonTest/kotlin/suite/TestSuiteMultiCluster.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import kotlinx.coroutines.delay
1313
import kotlinx.coroutines.isActive
1414
import kotlinx.io.core.String
1515
import runBlocking
16+
import shouldBeFalse
1617
import shouldBeTrue
1718
import shouldEqual
1819
import shouldNotBeEmpty
@@ -87,6 +88,7 @@ internal class TestSuiteMultiCluster {
8788
clientMcm.listUserIDs().userIDs.filter { it.userID.raw.startsWith(prefix) }.forEach {
8889
clientMcm.removeUserID(it.userID)
8990
}
91+
clientMcm.hasPendingMapping(true).clusters.isNullOrEmpty().shouldBeFalse()
9092
}
9193
}
9294
}

0 commit comments

Comments
 (0)