Кэшируйте весь запрос в Android Apollo - PullRequest
0 голосов
/ 11 января 2019

Как я могу кэшировать весь запрос, используя только его __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)
    }
}
...