Skip to content

Commit ea6ff8e

Browse files
committed
Update query to return a QueryResult
1 parent 5fa83ad commit ea6ff8e

4 files changed

Lines changed: 46 additions & 38 deletions

File tree

‎README.md‎

-44 Bytes

Build Status

    
    //Data class
    public class User {
        public String id, name, email;
    }

    //Create a client object
    Client client = new Client("https://api.mocki.io/v1/44cb3920");
    
    //For example we can set global variables and headers
    client.setGlobalVariable("someId", "1");
    client.setHeader("auth", "someAuthToken")

    //Find a user in the GraphQL api
    User user = client.query(
            new Query("query user($id: ID!) { user(id: $id) { id, name, email } }").setVariable("id", "1"))
            .first("user", User.class);
    User user = client.first(
            new Query("query user($id: ID!) { user(id: $id) { id, name, email } }").setVariable("id", "1"),
               "user",
               User.class
        );
    System.out.println(user)

‎src/main/java/nl/kingdev/graphqlclient/Client.java‎

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5-
import com.google.gson.JsonArray;
65
import com.google.gson.JsonObject;
7-
import com.google.gson.reflect.TypeToken;
86
import nl.kingdev.graphqlclient.query.Query;
7+
import nl.kingdev.graphqlclient.result.QueryResult;
98
import nl.kingdev.graphqlclient.util.HttpUtil;
109

1110
import java.util.HashMap;
12-
import java.util.List;
1311
import java.util.Map;
1412

1513

@@ -38,34 +36,18 @@ private JsonObject makeQueryJson(Query query) {
3836
return request;
3937
}
4038

41-
public <T> T first(Query query, String name, Class<T> type) {
42-
39+
public QueryResult query(Query query) {
4340
try {
4441
query.getVariables().putAll(globalVariables);
4542
JsonObject request = makeQueryJson(query);
46-
JsonObject result = gson.fromJson(HttpUtil.post(this.uri, request.toString(), headers), JsonObject.class);
47-
return gson.fromJson(result.get("data").getAsJsonObject().get(name), type);
43+
return new QueryResult(gson.fromJson(HttpUtil.post(this.uri, request.toString(), headers), JsonObject.class).get("data").getAsJsonObject());
4844
} catch (Exception e) {
4945
e.printStackTrace();
5046
}
5147

5248
return null;
5349
}
5450

55-
public <T> List<T> query(Query query, String name) {
56-
try {
57-
query.getVariables().putAll(globalVariables);
58-
JsonObject request = makeQueryJson(query);
59-
JsonObject result = gson.fromJson(HttpUtil.post(this.uri, request.toString(), headers), JsonObject.class);
60-
JsonArray array = result.get("data").getAsJsonObject().get(name).getAsJsonArray();
61-
return gson.fromJson(array, new TypeToken<T>() {
62-
}.getType());
63-
} catch (Exception e) {
64-
e.printStackTrace();
65-
}
66-
67-
return null;
68-
}
6951

7052

7153
public String getUri() {
@@ -95,4 +77,8 @@ public Client removeGlobalVariable(String name) {
9577
this.globalVariables.remove(name);
9678
return this;
9779
}
80+
81+
public static Gson getGson() {
82+
return gson;
83+
}
9884
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package nl.kingdev.graphqlclient.result;
2+
3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonObject;
5+
import com.google.gson.reflect.TypeToken;
6+
import nl.kingdev.graphqlclient.Client;
7+
8+
import java.util.List;
9+
10+
public class QueryResult {
11+
12+
private JsonObject result;
13+
14+
public QueryResult(JsonObject result) {
15+
this.result = result;
16+
}
17+
18+
public <T> T first(String name, Class<T> type) {
19+
return Client.getGson().fromJson(result.get(name), type);
20+
}
21+
public <T> List<T> get(String name) {
22+
JsonArray array = result.get(name).getAsJsonArray();
23+
return Client.getGson().fromJson(array, new TypeToken<T>() {}.getType());
24+
}
25+
}

‎src/test/java/nl/kingdev/graphqlclient/ClientTest.java‎

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@ public void headers() {
3030
@Test
3131
public void queryOne() {
3232
Client client = makeClient();
33-
User user = client.first(
34-
new Query("query user($id: ID!) { user(id: $id) { id, name, email } }")
35-
.setVariable("id", "1"),
36-
"user",
37-
User.class
38-
);
33+
User user = client.query(new Query("query user($id: ID!) { user(id: $id) { id, name, email } }")
34+
.setVariable("id", "1"))
35+
.first("user", User.class);
36+
37+
38+
System.out.println(user);
39+
3940
assertNotNull("User is null", user);
4041
assertEquals("1", user.getId());
4142
assertEquals("Leanne Graham", user.getName());
@@ -47,11 +48,8 @@ public void queryOne() {
4748
public void testGlobalVariable() {
4849
Client client = makeClient();
4950
client.setGlobalVariable("id", "1");
50-
User user = client.first(
51-
new Query("query user($id: ID!) { user(id: $id) { id, name, email } }"),
52-
"user",
53-
User.class
54-
);
51+
User user = client.query(new Query("query user($id: ID!) { user(id: $id) { id, name, email } }"))
52+
.first("user", User.class);
5553
assertNotNull("User is null", user);
5654
assertEquals("1", user.getId());
5755
assertEquals("Leanne Graham", user.getName());
@@ -76,20 +74,19 @@ public String toString() {
7674
@Test
7775
public void query() {
7876
Client client = new Client("https://api.mocki.io/v1/44cb3920");
79-
List<Todo> getTodos = client.query(new Query("query todos {getTodos {id, description, done}}"), "getTodos");
77+
List<Todo> getTodos = client.query(new Query("query todos {getTodos {id, description, done}}")).get("getTodos");
8078
assertNotNull(getTodos);
8179
assertTrue(getTodos.size() > 1);
8280
}
8381

8482
@Test
8583
public void file() {
8684
Client client = makeClient();
87-
User user = client.first(
85+
User user = client.query(
8886
Query.fromFile(this, "/users.graphql")
89-
.setVariable("id", "1"),
90-
"user",
91-
User.class
92-
);
87+
.setVariable("id", "1")
88+
).first("user", User.class);
89+
9390
assertNotNull("User is null", user);
9491
assertEquals("1", user.getId());
9592
assertEquals("Leanne Graham", user.getName());

0 commit comments

Comments
 (0)