Skip to content

Commit c2c3d57

Browse files
author
Aleksander Korelskiy
committed
feature(graphql): added ServerAfter option for graphql transport
1 parent add5b70 commit c2c3d57

3 files changed

Lines changed: 16 additions & 15 deletions

File tree

.editorconfig

Lines changed: 0 additions & 12 deletions
This file was deleted.

transport/grapql/request_response_funcs.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ import (
66
)
77

88
type RequestFunc func(context.Context, *http.Request) context.Context
9+
10+
type ResponseFunc func(context.Context, http.ResponseWriter) context.Context

transport/grapql/server.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type Server struct {
1414
ctx context.Context
1515
e endpoint.Endpoint
1616
before []RequestFunc
17+
after []ResponseFunc
1718
dec DecodeRequestFunc
1819
logger log.Logger
1920
}
@@ -44,28 +45,38 @@ func ServerBefore(before ...RequestFunc) ServerOption {
4445
return func(s *Server) { s.before = before }
4546
}
4647

48+
// ServerAfter functions are executed on the HTTP response writer after the
49+
// endpoint is invoked, but before anything is written to the client.
50+
func ServerAfter(after ...ResponseFunc) ServerOption {
51+
return func(s *Server) { s.after = append(s.after, after...) }
52+
}
53+
4754
func (s Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
4855
ctx := s.ctx
4956

5057
for _, f := range s.before {
5158
ctx = f(ctx, r)
5259
}
5360

54-
req, err := s.dec(ctx, r)
61+
request, err := s.dec(ctx, r)
5562
if err != nil {
5663
s.logger.Log("err", err)
5764
s.errorEncoder(ctx, err, w)
5865
return
5966
}
6067

61-
p, err := s.e(ctx, req)
68+
response, err := s.e(ctx, request)
6269
if err != nil {
6370
s.logger.Log("err", err)
6471
s.errorEncoder(ctx, err, w)
6572
return
6673
}
6774

68-
s.encodeResponse(ctx, w, graphql.Do(p.(graphql.Params)))
75+
for _, f := range s.after {
76+
ctx = f(ctx, w)
77+
}
78+
79+
s.encodeResponse(ctx, w, graphql.Do(response.(graphql.Params)))
6980
}
7081

7182
func (s Server) errorEncoder(_ context.Context, err error, w http.ResponseWriter) {

0 commit comments

Comments
 (0)