small refactor*
This commit is contained in:
parent
b6b541e050
commit
24a4d30275
232 changed files with 2164 additions and 1906 deletions
27
server/cmd/generate-graphql-schema/main.go
Normal file
27
server/cmd/generate-graphql-schema/main.go
Normal file
|
@ -0,0 +1,27 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
graph "git.kmsign.ru/royalcat/tstor/server/src/delivery/graphql"
|
||||
"github.com/vektah/gqlparser/v2/formatter"
|
||||
)
|
||||
|
||||
func main() {
|
||||
outFile := "schema.graphql"
|
||||
|
||||
if len(os.Args) > 1 {
|
||||
outFile = os.Args[1]
|
||||
}
|
||||
|
||||
file, err := os.OpenFile(outFile, os.O_CREATE|os.O_RDWR|os.O_TRUNC, os.ModePerm)
|
||||
if err != nil {
|
||||
log.Panic(fmt.Errorf("Failed to open %s: %w", outFile, err))
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
fmt := formatter.NewFormatter(file)
|
||||
fmt.FormatSchema(graph.NewExecutableSchema(graph.Config{}).Schema())
|
||||
}
|
94
server/cmd/generate-graphql/main.go
Normal file
94
server/cmd/generate-graphql/main.go
Normal file
|
@ -0,0 +1,94 @@
|
|||
// https://github.com/99designs/gqlgen/issues/2281#issuecomment-1506561381
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/99designs/gqlgen/api"
|
||||
"github.com/99designs/gqlgen/codegen"
|
||||
"github.com/99designs/gqlgen/codegen/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg, err := config.LoadConfigFromDefaultLocations()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, "failed to load config", err.Error())
|
||||
os.Exit(2)
|
||||
}
|
||||
|
||||
err = api.Generate(cfg,
|
||||
api.PrependPlugin(&resolverDirective{}),
|
||||
api.AddPlugin(&fieldDirectiveFix{}),
|
||||
)
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err.Error())
|
||||
os.Exit(3)
|
||||
}
|
||||
}
|
||||
|
||||
type fieldDirectiveFix struct {
|
||||
}
|
||||
|
||||
func (fieldDirectiveFix) Name() string {
|
||||
return "Fix Directive hook called with wrong object"
|
||||
}
|
||||
|
||||
func (fieldDirectiveFix) GenerateCode(cfg *codegen.Data) error {
|
||||
for _, input := range cfg.Inputs {
|
||||
for _, field := range input.Fields {
|
||||
if field.GoFieldType == codegen.GoFieldVariable {
|
||||
directiveMap := make(map[string]int, len(field.TypeReference.Definition.Directives)+len(field.Object.Directives))
|
||||
for _, v := range field.TypeReference.Definition.Directives {
|
||||
directiveMap[v.Name]++
|
||||
}
|
||||
|
||||
directive := make([]*codegen.Directive, 0, len(field.Directives))
|
||||
for _, v := range field.Directives {
|
||||
if count := directiveMap[v.Name]; count > 0 {
|
||||
directiveMap[v.Name] = count - 1
|
||||
fmt.Printf("Ignore field %s{%s} directive: @%s\n", input.Name, field.Name, v.Name)
|
||||
continue
|
||||
}
|
||||
|
||||
directive = append(directive, v)
|
||||
}
|
||||
|
||||
field.Directives = directive
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
type resolverDirective struct {
|
||||
}
|
||||
|
||||
func (resolverDirective) Name() string {
|
||||
return "Resolver directive support"
|
||||
}
|
||||
|
||||
func (resolverDirective) GenerateCode(cfg *codegen.Data) error {
|
||||
const directiveName = "resolver"
|
||||
|
||||
for _, obj := range cfg.Objects {
|
||||
for _, field := range obj.Fields {
|
||||
if field.FieldDefinition.Directives.ForName(directiveName) != nil {
|
||||
fmt.Printf("Add resolver for field %s{%s}\n", obj.Name, field.Name)
|
||||
field.IsResolver = true
|
||||
|
||||
// TODO
|
||||
// field.FieldDefinition.Directives = removeDirective(field.FieldDefinition.Directives, directiveName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// func removeDirective(directives ast.DirectiveList, name string) ast.DirectiveList {
|
||||
// return slices.DeleteFunc(directives, func(directive *ast.Directive) bool {
|
||||
// return directive.Name == name
|
||||
// })
|
||||
// }
|
Loading…
Add table
Add a link
Reference in a new issue