This PR adds the necessary resolvers to support the graphQL front-end. Some additional methods need to be added to the model structs to support this. Comments have been made to clarify their purpose. There is a slight duplication of code in the api layer. But eventually that's going to go away when we move away from the REST API entirely. The schema is in api4/schema.graphqls and gets compiled into the binary as an asset. The GraphiQL editor url is at GET /api/v5/graphql. Everything is behind the feature flag MM_FEATUREFLAGS_GRAPHQL. ```release-note NONE ```
38 строки
786 B
Go
38 строки
786 B
Go
package common
|
|
|
|
import (
|
|
"github.com/graph-gophers/graphql-go/types"
|
|
)
|
|
|
|
func ParseInputValue(l *Lexer) *types.InputValueDefinition {
|
|
p := &types.InputValueDefinition{}
|
|
p.Loc = l.Location()
|
|
p.Desc = l.DescComment()
|
|
p.Name = l.ConsumeIdentWithLoc()
|
|
l.ConsumeToken(':')
|
|
p.TypeLoc = l.Location()
|
|
p.Type = ParseType(l)
|
|
if l.Peek() == '=' {
|
|
l.ConsumeToken('=')
|
|
p.Default = ParseLiteral(l, true)
|
|
}
|
|
p.Directives = ParseDirectives(l)
|
|
return p
|
|
}
|
|
|
|
func ParseArgumentList(l *Lexer) types.ArgumentList {
|
|
var args types.ArgumentList
|
|
l.ConsumeToken('(')
|
|
for l.Peek() != ')' {
|
|
name := l.ConsumeIdentWithLoc()
|
|
l.ConsumeToken(':')
|
|
value := ParseLiteral(l, false)
|
|
args = append(args, &types.Argument{
|
|
Name: name,
|
|
Value: value,
|
|
})
|
|
}
|
|
l.ConsumeToken(')')
|
|
return args
|
|
}
|