Vitaliy Kondratiev
11/20/2020, 1:05 AMmbonnin
11/20/2020, 12:52 PMmbonnin
11/20/2020, 12:52 PMApolloCacheHeaders.DO_NOT_STORE
to avoid storing anything in the cacheVitaliy Kondratiev
11/20/2020, 1:11 PMmbonnin
11/20/2020, 1:12 PMmbonnin
11/20/2020, 1:16 PMapolloClient
.mutate(Mutation(email = Input.fromNullable(email)))
.toBuilder()
.cacheHeaders(CacheHeaders.builder()
.addHeader(ApolloCacheHeaders.DO_NOT_STORE, "true")
.build()
)
.build()
.await()
Vitaliy Kondratiev
11/20/2020, 1:16 PMmbonnin
11/20/2020, 1:16 PMmbonnin
11/20/2020, 1:17 PMVitaliy Kondratiev
11/20/2020, 9:04 PMmbonnin
11/20/2020, 9:24 PMApolloInterceptor
mbonnin
11/20/2020, 9:26 PMmbonnin
11/20/2020, 9:27 PMapolloClient.apolloStore.write(operation, data)
, this way you have full control of what ends up in the cacheVitaliy Kondratiev
11/20/2020, 9:32 PMLruNormalizedCache
was an open class
class CustomLruNormalizedCache constructor(evictionPolicy: EvictionPolicy) :
LruNormalizedCache(evictionPolicy) {
companion object {
private const val GENERATED_AT_FIELD = "generatedAt"
}
@SuppressWarnings("NestedBlockDepth")
override fun merge(recordSet: Collection<Record>, cacheHeaders: CacheHeaders): Set<String> {
recordSet.recordWithGeneratedAt()?.let { record ->
record.generatedAt()?.let { newGeneratedAt ->
loadRecord(record.key, CacheHeaders.NONE).generatedAt()?.let { lastGeneratedAt ->
Timber.d("Last: $lastGeneratedAt | New: $newGeneratedAt")
if (newGeneratedAt < lastGeneratedAt) {
return emptySet()
}
}
}
}
return super.merge(recordSet, cacheHeaders)
}
private fun Collection<Record>.recordWithGeneratedAt(): Record? = firstOrNull { it.hasField(GENERATED_AT_FIELD) }
private fun Record?.generatedAt(): Long? = try {
this?.fields?.get(GENERATED_AT_FIELD).asType<String>()?.toLong()
} catch (e: Throwable) {
null
}
}
mbonnin
11/20/2020, 9:33 PMmbonnin
11/20/2020, 9:33 PMVitaliy Kondratiev
11/20/2020, 9:34 PMLruNormalizedCache
?mbonnin
11/20/2020, 9:34 PMmbonnin
11/20/2020, 9:34 PMCustomLruNormalizedCacheFactory
Vitaliy Kondratiev
11/20/2020, 9:36 PMmbonnin
11/20/2020, 9:37 PMmbonnin
11/20/2020, 9:38 PMVitaliy Kondratiev
11/20/2020, 9:40 PM