@@ -30,7 +30,24 @@ actor GenericQueryRef<ResultData: Decodable & Sendable, Variable: OperationVaria
3030
3131 private let cache : Cache ?
3232
33- private var ttl : TimeInterval ? = 10.0 //
33+ // maxAge received from server in query response
34+ private var serverMaxAge : TimeInterval ? = nil
35+
36+ // maxAge computed based on server or cache settings
37+ // server is given priority over cache settings
38+ private var maxAge : TimeInterval {
39+ if let serverMaxAge {
40+ DataConnectLogger . debug ( " Using maxAge specified from server \( serverMaxAge) " )
41+ return serverMaxAge
42+ }
43+
44+ if let ma = cache? . config. maxAge {
45+ DataConnectLogger . debug ( " Using maxAge specified from cache settings \( ma) " )
46+ return ma
47+ }
48+
49+ return 0
50+ }
3451
3552 // Ideally we would like this to be part of the QueryRef protocol
3653 // Not adding for now since the protocol is Public
@@ -94,6 +111,7 @@ actor GenericQueryRef<ResultData: Decodable & Sendable, Variable: OperationVaria
94111
95112 do {
96113 if let cache {
114+ serverMaxAge = response. maxAge
97115 await cache. update ( queryId: operationId, response: response, requestor: self )
98116 }
99117 }
@@ -112,15 +130,14 @@ actor GenericQueryRef<ResultData: Decodable & Sendable, Variable: OperationVaria
112130 }
113131
114132 private func fetchCachedResults( allowStale: Bool ) async throws -> OperationResult < ResultData > {
115- guard let cache,
116- let ttl,
117- ttl > 0 else {
118- DataConnectLogger . info ( " No cache provider configured or ttl is not set \( ttl) " )
133+ guard let cache
134+ else {
135+ DataConnectLogger . info ( " No cache provider configured " )
119136 return OperationResult ( data: nil , source: . cache)
120137 }
121138
122139 if let cacheEntry = await cache. resultTree ( queryId: request. requestId) ,
123- ( cacheEntry. isStale ( ttl ) && allowStale) || !cacheEntry. isStale ( ttl ) {
140+ ( cacheEntry. isStale ( maxAge ) && allowStale) || !cacheEntry. isStale ( maxAge ) {
124141 let decoder = JSONDecoder ( )
125142 let decodedData = try decoder. decode (
126143 ResultData . self,
0 commit comments