Skip to content

Commit d33fe9d

Browse files
committed
movies and everything union
1 parent 6a20267 commit d33fe9d

3 files changed

Lines changed: 62 additions & 2 deletions

File tree

book-details/src/main/java/com/graphqljava/tutorial/bookdetails/GraphQLDataFetchers.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import com.google.common.collect.ImmutableMap;
44
import graphql.schema.DataFetcher;
5+
import graphql.schema.GraphQLObjectType;
6+
import graphql.schema.TypeResolver;
57
import org.springframework.stereotype.Component;
68

9+
import java.util.ArrayList;
710
import java.util.Arrays;
811
import java.util.List;
912
import java.util.Map;
@@ -26,6 +29,11 @@ public class GraphQLDataFetchers {
2629
"authorId", "author-3")
2730
);
2831

32+
private static List<Map<String, String>> movies = Arrays.asList(
33+
ImmutableMap.of("id", "movie-1",
34+
"name", "Lost in translation"
35+
));
36+
2937
private static List<Map<String, String>> authors = Arrays.asList(
3038
ImmutableMap.of("id", "author-1",
3139
"firstName", "Joanne",
@@ -61,9 +69,47 @@ public DataFetcher getAuthorDataFetcher() {
6169
};
6270
}
6371

72+
public DataFetcher getBookTitleDataFetcher() {
73+
return dataFetchingEnvironment -> {
74+
Map<String, String> book = dataFetchingEnvironment.getSource();
75+
return book.get("name");
76+
};
77+
}
78+
6479
public DataFetcher helloDataFetcher() {
6580
return dataFetchingEnvironment -> {
6681
return "world";
6782
};
6883
}
84+
85+
public DataFetcher getMovieByIdDataFetcher() {
86+
return dataFetchingEnvironment -> {
87+
String movieId = dataFetchingEnvironment.getArgument("id");
88+
return movies
89+
.stream()
90+
.filter(book -> book.get("id").equals(movieId))
91+
.findFirst()
92+
.orElse(null);
93+
};
94+
}
95+
96+
public DataFetcher everythingDataFetcher() {
97+
return env -> {
98+
List<Object> result = new ArrayList<>();
99+
result.addAll(movies);
100+
result.addAll(books);
101+
return result;
102+
};
103+
}
104+
105+
public TypeResolver everythingTypeResolver = env -> {
106+
Map<String, Object> bookOrMovie = env.getObject();
107+
String id = (String) bookOrMovie.get("id");
108+
if (id.startsWith("movie")) {
109+
return (GraphQLObjectType) env.getSchema().getType("Movie");
110+
} else {
111+
return (GraphQLObjectType) env.getSchema().getType("Book");
112+
}
113+
114+
};
69115
}

book-details/src/main/java/com/graphqljava/tutorial/bookdetails/GraphQLProvider.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,15 @@ private RuntimeWiring buildWiring() {
4646
return RuntimeWiring.newRuntimeWiring()
4747
.type(newTypeWiring("Query")
4848
.dataFetcher("bookById", graphQLDataFetchers.getBookByIdDataFetcher())
49+
.dataFetcher("movieById", graphQLDataFetchers.getMovieByIdDataFetcher())
4950
.dataFetcher("hello", graphQLDataFetchers.helloDataFetcher())
51+
.dataFetcher("everything", graphQLDataFetchers.everythingDataFetcher())
5052
)
5153
.type(newTypeWiring("Book")
52-
.dataFetcher("author", graphQLDataFetchers.getAuthorDataFetcher()))
54+
.dataFetcher("author", graphQLDataFetchers.getAuthorDataFetcher())
55+
.dataFetcher("title", graphQLDataFetchers.getBookTitleDataFetcher()))
56+
.type(newTypeWiring("Thing")
57+
.typeResolver(graphQLDataFetchers.everythingTypeResolver))
5358
.build();
5459
}
5560

book-details/src/main/resources/schema.graphqls

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
type Query {
22
hello: String
33
bookById(id: ID): Book
4+
movieById(id: ID): Movie
5+
everything: [Thing]
46
}
57

6-
type Book {
8+
union Thing = Movie | Book
9+
10+
type Movie {
711
id: ID
812
name: String
13+
}
14+
15+
type Book {
16+
id: ID
17+
title: String
918
pageCount: Int
1019
author: Author
1120
}

0 commit comments

Comments
 (0)