|
9 | 9 | import org.dataloader.BatchLoader; |
10 | 10 | import org.dataloader.DataLoader; |
11 | 11 | import org.dataloader.impl.PromisedValues; |
| 12 | +import org.slf4j.Logger; |
| 13 | +import org.slf4j.LoggerFactory; |
12 | 14 |
|
13 | 15 | import java.util.ArrayList; |
14 | 16 | import java.util.Collections; |
|
17 | 19 | import java.util.concurrent.CompletableFuture; |
18 | 20 | import java.util.concurrent.CompletionStage; |
19 | 21 |
|
20 | | -import static com.graphql.example.util.QueryParameters.QueryParameter.qp; |
| 22 | +import static com.graphql.example.util.HttpQueryParameter.qp; |
21 | 23 | import static java.util.stream.Collectors.toList; |
22 | 24 |
|
23 | 25 | class IceAndFireDataFetchers { |
24 | 26 |
|
| 27 | + private static final Logger log = LoggerFactory.getLogger(IceAndFireDataFetchers.class); |
| 28 | + |
25 | 29 | public static final int PAGE_SIZE = 50; // this is what they allow |
26 | 30 |
|
27 | 31 | private BatchLoader<String, Object> urlBatchLoader = urls -> { |
@@ -128,16 +132,41 @@ DataFetcher urlObject() { |
128 | 132 | DataFetcher books() { |
129 | 133 | return env -> |
130 | 134 | CompletableFuture.supplyAsync(() -> |
131 | | - ForwardOnlyFixedPagedDataSet.getConnection(env, PAGE_SIZE, pageNumber -> HttpClient.readResource("books", |
132 | | - qp("page", pageNumber), qp("pageSize", PAGE_SIZE)))); |
| 135 | + ForwardOnlyFixedPagedDataSet.getConnection(env, PAGE_SIZE, |
| 136 | + pageNumber -> readPagedObjects("books", pageNumber))); |
| 137 | + } |
| 138 | + |
| 139 | + DataFetcher houses() { |
| 140 | + return env -> |
| 141 | + CompletableFuture.supplyAsync(() -> |
| 142 | + ForwardOnlyFixedPagedDataSet.getConnection(env, PAGE_SIZE, |
| 143 | + pageNumber -> readPagedObjects("houses", pageNumber))); |
133 | 144 | } |
134 | 145 |
|
135 | 146 | DataFetcher characters() { |
136 | 147 | return env -> |
137 | 148 | CompletableFuture.supplyAsync(() -> |
138 | | - ForwardOnlyFixedPagedDataSet.getConnection(env, PAGE_SIZE, pageNumber -> |
139 | | - HttpClient.readResource("characters", qp("pageNumber", pageNumber), |
140 | | - qp("pageSize", PAGE_SIZE)))); |
| 149 | + ForwardOnlyFixedPagedDataSet.getConnection(env, PAGE_SIZE, |
| 150 | + pageNumber -> readPagedObjects("characters", pageNumber))); |
| 151 | + } |
| 152 | + |
| 153 | + private ForwardOnlyFixedPagedDataSet.PagedResult<Map<String, Object>> readPagedObjects(String resource, int pageNumber) { |
| 154 | + log.info("Fetching {} page: {}", resource, pageNumber); |
| 155 | + ForwardOnlyFixedPagedDataSet.PagedResult<Map<String, Object>> pagedResult = |
| 156 | + HttpClient.readResource(resource, qp("pageNumber", pageNumber), qp("pageSize", PAGE_SIZE)); |
| 157 | + |
| 158 | + log.info("\tread {} {}", pagedResult.getResults().size(), resource); |
| 159 | + |
| 160 | + pagedResult.getResults().forEach(resourceObj -> { |
| 161 | + // |
| 162 | + // this is mutative since relay requires ids yet the REST API does not have them |
| 163 | + addGlobalIds(resourceObj); |
| 164 | + String url = (String) resourceObj.get("url"); |
| 165 | + // |
| 166 | + // prime the dataloader with each entry so caching should work when we ask for it again |
| 167 | + resourceDataLoader.prime(url, resourceObj); |
| 168 | + }); |
| 169 | + return pagedResult; |
141 | 170 | } |
142 | 171 |
|
143 | 172 | private static <T> T mapGet(Map<String, Object> source, String fieldName) { |
|
0 commit comments