Skip to content

Commit

Permalink
refactor to GraphQLHttpRequest and GraphQLHttpResponse and added para…
Browse files Browse the repository at this point in the history
…ms map
  • Loading branch information
andimarek committed Sep 14, 2020
1 parent 740a3f1 commit 8238353
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,29 @@ public GraphQLHandler(GraphQL graphQL, GraphQLInterceptor interceptor) {
this.interceptor = interceptor;
}

public Mono<GraphQLResponse> graphqlPOST(GraphQLRequestBody body, HttpHeaders httpHeaders) {
String query = body.getQuery();
public Mono<GraphQLHttpResponse> graphqlPOST(GraphQLHttpRequest graphQLHttpRequest) {
String query = graphQLHttpRequest.getQuery();
ExecutionInput input = ExecutionInput.newExecutionInput()
.query(query)
.operationName(body.getOperationName())
.variables(body.getVariables())
.operationName(graphQLHttpRequest.getOperationName())
.variables(graphQLHttpRequest.getVariables())
.build();
Mono<ExecutionInput> executionInput = interceptor.preHandle(input, httpHeaders);
Mono<ExecutionInput> executionInput = interceptor.preHandle(input, graphQLHttpRequest.getHttpHeaders());
return executionInput
.flatMap(this::execute)
.flatMap(result -> interceptor.postHandle(result, httpHeaders))
.flatMap(result -> toResponseBody(result, httpHeaders));
.flatMap(result -> interceptor.postHandle(result, graphQLHttpRequest.getHttpHeaders()))
.flatMap(result -> toResponseBody(result, graphQLHttpRequest.getHttpHeaders()));
}

private Mono<GraphQLResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders) {
private Mono<GraphQLHttpResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders) {
Map<String, Object> responseBodyRaw = executionResult.toSpecification();
Object data = responseBodyRaw.get("data");
List<Map<String, Object>> errors = (List<Map<String, Object>>) responseBodyRaw.get("errors");
Map<String, Object> extensions = (Map<String, Object>) responseBodyRaw.get("extensions");
GraphQLResponse responseBody = new GraphQLResponse(data,
GraphQLHttpResponse responseBody = new GraphQLHttpResponse(data,
errors,
extensions);
Mono<GraphQLResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders);
extensions, httpHeaders);
Mono<GraphQLHttpResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders);
return graphQLResponseBodyMono;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.springframework.graphql;

import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;

import java.util.Map;

public class GraphQLHttpRequest {
private final String query;
private final String operationName;
private final Map<String, Object> variables;
private final HttpHeaders httpHeaders;
private final MultiValueMap<String, String> requestParams;

public GraphQLHttpRequest(String query,
String operationName,
Map<String, Object> variables,
HttpHeaders httpHeaders,
MultiValueMap<String, String> requestParams) {
this.query = query;
this.operationName = operationName;
this.variables = variables;
this.httpHeaders = httpHeaders;
this.requestParams = requestParams;
}

public String getQuery() {
return query;
}

public String getOperationName() {
return operationName;
}

public Map<String, Object> getVariables() {
return variables;
}

public HttpHeaders getHttpHeaders() {
return httpHeaders;
}

public MultiValueMap<String, String> getRequestParams() {
return requestParams;
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,25 @@
package org.springframework.graphql;

import org.springframework.http.HttpHeaders;

import java.util.List;
import java.util.Map;

public class GraphQLResponse {
public class GraphQLHttpResponse {

private final Object data;
private final List<Map<String, Object>> errors;
private final Map<String, Object> extensions;
private final HttpHeaders httpHeaders;

public GraphQLResponse(Object data, List<Map<String, Object>> errors, Map<String, Object> extensions) {
public GraphQLHttpResponse(Object data,
List<Map<String, Object>> errors,
Map<String, Object> extensions,
HttpHeaders httpHeaders) {
this.data = data;
this.errors = errors;
this.extensions = extensions;
this.httpHeaders = httpHeaders;
}

public Object getData() {
Expand All @@ -26,4 +33,8 @@ public List<Map<String, Object>> getErrors() {
public Map<String, Object> getExtensions() {
return extensions;
}

public HttpHeaders getHttpHeaders() {
return httpHeaders;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ default Mono<ExecutionResult> postHandle(ExecutionResult result, HttpHeaders htt
return Mono.just(result);
}

default Mono<GraphQLResponse> customizeResponseBody(GraphQLResponse graphQLResponse, ExecutionResult executionResult, HttpHeaders httpHeader) {
return Mono.just(graphQLResponse);
default Mono<GraphQLHttpResponse> customizeResponseBody(GraphQLHttpResponse graphQLHttpResponse, ExecutionResult executionResult, HttpHeaders httpHeader) {
return Mono.just(graphQLHttpResponse);
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.graphql.DefaultGraphQLInterceptor;
import org.springframework.graphql.GraphQLHandler;
import org.springframework.graphql.GraphQLHttpRequest;
import org.springframework.graphql.GraphQLInterceptor;
import org.springframework.graphql.GraphQLRequestBody;
import org.springframework.web.reactive.function.server.RouterFunction;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
Expand Down Expand Up @@ -58,8 +58,13 @@ private Mono<ServerResponse> graphqlPOST(ServerRequest serverRequest) {
if (variables == null) {
variables = Collections.emptyMap();
}
GraphQLRequestBody graphQLRequestBody = new GraphQLRequestBody(query, body.getOperationName(), variables);
return graphQLHandler.graphqlPOST(graphQLRequestBody, serverRequest.headers().asHttpHeaders());
GraphQLHttpRequest graphQLHttpRequest = new GraphQLHttpRequest(
query,
body.getOperationName(),
variables,
serverRequest.headers().asHttpHeaders(),
serverRequest.queryParams());
return graphQLHandler.graphqlPOST(graphQLHttpRequest);
}).flatMap(graphQLResponseBody -> {
//TODO: this should be handled better:
// we don't want to serialize `null` values for `errors` and `extensions`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.graphql.DefaultGraphQLInterceptor;
import org.springframework.graphql.GraphQLHandler;
import org.springframework.graphql.GraphQLHttpRequest;
import org.springframework.graphql.GraphQLInterceptor;
import org.springframework.graphql.GraphQLRequestBody;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.function.RequestPredicates;
import org.springframework.web.servlet.function.RouterFunction;
Expand Down Expand Up @@ -70,9 +70,14 @@ private ServerResponse graphqlPOST(ServerRequest serverRequest) {
variables = Collections.emptyMap();
}

GraphQLRequestBody graphQLRequestBody = new GraphQLRequestBody(query, body.getOperationName(), variables);
GraphQLHttpRequest graphQLHttpRequest = new GraphQLHttpRequest(
query,
body.getOperationName(),
variables,
serverRequest.headers().asHttpHeaders(),
serverRequest.params());

Mono<Map<String, Object>> responseRawMono = graphQLHandler.graphqlPOST(graphQLRequestBody, serverRequest.headers().asHttpHeaders())
Mono<Map<String, Object>> responseRawMono = graphQLHandler.graphqlPOST(graphQLHttpRequest)
.map(graphQLResponseBody -> {
//TODO: this should be handled better:
// we don't want to serialize `null` values for `errors` and `extensions`
Expand Down

0 comments on commit 8238353

Please sign in to comment.