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

commonMain.com.algolia.search.client.internal.IndexImpl.kt Maven / Gradle / Ivy

@file:Suppress("FunctionName")

package com.algolia.search.client.internal

import com.algolia.search.client.Index
import com.algolia.search.endpoint.EndpointAdvanced
import com.algolia.search.endpoint.EndpointAnswers
import com.algolia.search.endpoint.EndpointIndex
import com.algolia.search.endpoint.EndpointIndexing
import com.algolia.search.endpoint.EndpointRule
import com.algolia.search.endpoint.EndpointSearch
import com.algolia.search.endpoint.EndpointSettings
import com.algolia.search.endpoint.EndpointSynonym
import com.algolia.search.endpoint.internal.EndpointAdvanced
import com.algolia.search.endpoint.internal.EndpointAnswers
import com.algolia.search.endpoint.internal.EndpointIndex
import com.algolia.search.endpoint.internal.EndpointIndexing
import com.algolia.search.endpoint.internal.EndpointRule
import com.algolia.search.endpoint.internal.EndpointSearch
import com.algolia.search.endpoint.internal.EndpointSettings
import com.algolia.search.endpoint.internal.EndpointSynonym
import com.algolia.search.model.IndexName
import com.algolia.search.model.response.ResponseSearch
import com.algolia.search.model.response.ResponseSearchRules
import com.algolia.search.model.response.ResponseSearchSynonyms
import com.algolia.search.model.rule.RuleQuery
import com.algolia.search.model.search.Query
import com.algolia.search.model.synonym.SynonymQuery
import com.algolia.search.transport.RequestOptions
import com.algolia.search.transport.internal.Transport

internal class IndexImpl internal constructor(
    internal val transport: Transport,
    override val indexName: IndexName,
) : Index,
    EndpointSearch by EndpointSearch(transport, indexName),
    EndpointSettings by EndpointSettings(transport, indexName),
    EndpointAdvanced by EndpointAdvanced(transport, indexName),
    EndpointIndex by EndpointIndex(transport, indexName),
    EndpointIndexing by EndpointIndexing(transport, indexName),
    EndpointSynonym by EndpointSynonym(transport, indexName),
    EndpointRule by EndpointRule(transport, indexName),
    EndpointAnswers by EndpointAnswers(transport, indexName) {

    override suspend fun browseRules(
        query: RuleQuery,
        requestOptions: RequestOptions?,
    ): List {
        val responses = mutableListOf()
        var page = 0

        while (true) {
            val response = searchRules(query.copy(page = page++), requestOptions)

            if (response.hits.isEmpty()) break
            responses += response
        }
        return responses
    }

    override suspend fun browseSynonyms(
        query: SynonymQuery,
        requestOptions: RequestOptions?,
    ): List {
        val responses = mutableListOf()
        var page = 0

        while (true) {
            val response = searchSynonyms(query.copy(page = page++), requestOptions)

            if (response.hits.isEmpty()) break
            responses += response
        }
        return responses
    }

    override suspend fun browseObjects(
        query: Query,
        requestOptions: RequestOptions?,
    ): List {
        val responses = mutableListOf()
        val initial = browse(query, requestOptions)
        var cursor = initial.cursorOrNull

        responses += initial
        while (cursor != null) {
            val response = browse(cursor)

            responses += response
            cursor = response.cursorOrNull
        }
        return responses
    }
}

/**
 * Create an [Index] instance.
 *
 * @param transport transport operations
 * @param indexName index name
 */
internal fun Index(
    transport: Transport,
    indexName: IndexName,
): Index = IndexImpl(transport, indexName)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy