Skip to content

Commit

Permalink
pass params to interceptor
Browse files Browse the repository at this point in the history
  • Loading branch information
andimarek committed Sep 14, 2020
1 parent 8238353 commit a7cf5b6
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
Expand Up @@ -4,6 +4,7 @@
import graphql.ExecutionResult;
import graphql.GraphQL;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;
import reactor.core.publisher.Mono;

import java.util.List;
Expand All @@ -26,22 +27,25 @@ public Mono<GraphQLHttpResponse> graphqlPOST(GraphQLHttpRequest graphQLHttpReque
.operationName(graphQLHttpRequest.getOperationName())
.variables(graphQLHttpRequest.getVariables())
.build();
Mono<ExecutionInput> executionInput = interceptor.preHandle(input, graphQLHttpRequest.getHttpHeaders());
MultiValueMap<String, String> requestParams = graphQLHttpRequest.getRequestParams();
Mono<ExecutionInput> executionInput = interceptor.preHandle(input,
graphQLHttpRequest.getHttpHeaders(),
requestParams);
return executionInput
.flatMap(this::execute)
.flatMap(result -> interceptor.postHandle(result, graphQLHttpRequest.getHttpHeaders()))
.flatMap(result -> toResponseBody(result, graphQLHttpRequest.getHttpHeaders()));
.flatMap(result -> interceptor.postHandle(result, graphQLHttpRequest.getHttpHeaders(), requestParams))
.flatMap(result -> toResponseBody(result, graphQLHttpRequest.getHttpHeaders(), requestParams));
}

private Mono<GraphQLHttpResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders) {
private Mono<GraphQLHttpResponse> toResponseBody(ExecutionResult executionResult, HttpHeaders httpHeaders, MultiValueMap<String, String> requestParams) {
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");
GraphQLHttpResponse responseBody = new GraphQLHttpResponse(data,
errors,
extensions, httpHeaders);
Mono<GraphQLHttpResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders);
Mono<GraphQLHttpResponse> graphQLResponseBodyMono = interceptor.customizeResponseBody(responseBody, executionResult, httpHeaders, requestParams);
return graphQLResponseBodyMono;
}

Expand Down
Expand Up @@ -3,19 +3,27 @@
import graphql.ExecutionInput;
import graphql.ExecutionResult;
import org.springframework.http.HttpHeaders;
import org.springframework.util.MultiValueMap;
import reactor.core.publisher.Mono;

public interface GraphQLInterceptor {

default Mono<ExecutionInput> preHandle(ExecutionInput input, HttpHeaders headers) {
default Mono<ExecutionInput> preHandle(ExecutionInput input,
HttpHeaders headers,
MultiValueMap<String, String> requestParams) {
return Mono.just(input);
}

default Mono<ExecutionResult> postHandle(ExecutionResult result, HttpHeaders httpHeaders) {
default Mono<ExecutionResult> postHandle(ExecutionResult result,
HttpHeaders httpHeaders,
MultiValueMap<String, String> requestParams) {
return Mono.just(result);
}

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

Expand Down

0 comments on commit a7cf5b6

Please sign in to comment.