aboutsummaryrefslogtreecommitdiffstats
path: root/api/graphql/handler.go
blob: 1d30bf72f57c4072b6d37ef74f800690f01b3113 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//go:generate go run github.com/99designs/gqlgen generate

// Package graphql contains the root GraphQL http handler
package graphql

import (
	"io"
	"net/http"

	"github.com/99designs/gqlgen/graphql/handler"

	"github.com/MichaelMure/git-bug/api/graphql/graph"
	"github.com/MichaelMure/git-bug/api/graphql/resolvers"
	"github.com/MichaelMure/git-bug/cache"
)

// Handler is the root GraphQL http handler
type Handler struct {
	http.Handler
	io.Closer
}

func NewHandler(mrc *cache.MultiRepoCache, errorOut io.Writer) Handler {
	rootResolver := resolvers.NewRootResolver(mrc)
	config := graph.Config{Resolvers: rootResolver}
	h := handler.NewDefaultServer(graph.NewExecutableSchema(config))

	if errorOut != nil {
		h.Use(&Tracer{Out: errorOut})
	}

	return Handler{
		Handler: h,
		Closer:  rootResolver,
	}
}