Как я могу кэшировать весь запрос, используя только его __typename
или что-то подобное, поскольку у меня нет идентификатора?
Я хочу иметь возможность кэшировать его каждый раз, когда приведенный ниже запрос выполняется с использованием apollo-android
:
{
"query": "query LookForDashboard($cycle: DashboardInput!) { Dashboard(cycle: $cycle) { __typename activities { __typename type title message clients { __typename ...ClientSearchItemFragment } value recommendation { __typename categoryIdRecommended productId productName } } reports { __typename type data { __typename value date } } cycleInfo { __typename totalSold totalReceived totalToReceive lastUpdated } }}fragment ClientSearchItemFragment on ClientListResponse { __typename id fullName cellPhone gender avatar birthdate email note status lastOrder pendingInstallments}",
"variables": {
"cycle": {
"currentCycleBegin": 1.546308E12,
"currentCycleEnd": 1.5489E12
}
}
}
Ответ:
{
"data": {
"Dashboard": {
"activities": [
{
"type": "expired",
"title": null,
"message": null,
"clients": [
{
"id": 233
},
{
"id": 472
}
],
"value": 1364.3,
"recommendation": null
}
],
"reports": [
{
"type": "sold",
"data": [
{
"value": 0,
"date": 1539388800000
},{
"value": 0,
"date": 1539648000000
},
{
"value": 1364.3,
"date": 1548806400000
},
{
"value": 1364.3,
"date": 1548892800000
}
]
}
],
"cycleInfo": {
"totalSold": 0,
"totalReceived": 0,
"totalToReceive": 148.13,
"lastUpdated": 1547244717584
}
}
}
}
Что я пробовал и не работает:
override fun fromFieldRecordSet(field: ResponseField, recordSet: Map<String, Any>): CacheKey {
return if (recordSet.containsKey("id")) {
val typeNameAndIDKey = recordSet["__typename"].toString() + "." + recordSet["id"]
CacheKey.from(typeNameAndIDKey)
} else { // CACHE THE WHOLE QUERY
val typeName = recordSet["__typename"] as String
CacheKey.from(typeName)
}
}