in http/client/src/commonMain/kotlin/org/jetbrains/packagesearch/api/v3/http/PackageSearchApiClient.kt [331:368]
public suspend fun searchPackages(
request: SearchPackagesRequest,
requestBuilder: (HttpRequestBuilder.() -> Unit)? = null,
): List<ApiPackage> {
val searchCache = searchCacheCollection.await()
searchCache.find(selector = SearchCacheEntry::key.name, value = request)
.firstOrNull()
?.takeIf { isOffline || !it.isExpired(cacheDuration) }
?.also { return it.value }
// cache result not found or expired or not exhaustive enough
return defaultRequest<_, List<ApiPackage>>(
method = HttpMethod.Post,
url = endpoints.searchPackages,
body = request,
requestBuilder = requestBuilder,
).also { newPackages ->
searchCache.updateWhere(
fieldSelector = SearchCacheEntry::key.name,
fieldValue = request,
upsert = true,
update = SearchCacheEntry(request, newPackages)
)
val packagesCache = packagesCacheCollection.await()
newPackages.forEach {
packagesCache.updateWhere(
fieldSelector = PackageCacheEntry::key.name,
fieldValue = it.idHash,
upsert = true,
update = PackageCacheEntry(it.idHash, it)
)
}
}
}