This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
backend/internal/gin/middleware/dataloader_to_context.go
2021-05-14 15:34:26 +02:00

37 lines
864 B
Go

package middleware
import (
"context"
"github.com/pkg/errors"
"github.com/gin-gonic/gin"
"github.com/zdam-egzamin-zawodowy/backend/internal/graphql/dataloader"
)
var (
dataLoaderToContext contextKey = "data_loader"
)
func DataLoaderToContext(cfg dataloader.Config) gin.HandlerFunc {
return func(c *gin.Context) {
ctx := context.WithValue(c.Request.Context(), dataLoaderToContext, dataloader.New(cfg))
c.Request = c.Request.WithContext(ctx)
c.Next()
}
}
func DataLoaderFromContext(ctx context.Context) (*dataloader.DataLoader, error) {
dataLoader := ctx.Value(dataLoaderToContext)
if dataLoader == nil {
err := errors.New("couldn't retrieve dataloader.DataLoader")
return nil, err
}
dl, ok := dataLoader.(*dataloader.DataLoader)
if !ok {
err := errors.New("dataloader.DataLoader has wrong type")
return nil, err
}
return dl, nil
}