64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
//go:build tools
|
|
// +build tools
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/99designs/gqlgen/api"
|
|
"github.com/99designs/gqlgen/codegen/config"
|
|
"github.com/99designs/gqlgen/plugin/modelgen"
|
|
)
|
|
|
|
func mutateHook(b *modelgen.ModelBuild) *modelgen.ModelBuild {
|
|
for _, model := range b.Models {
|
|
|
|
for _, field := range model.Fields {
|
|
|
|
if field.Name == "id" {
|
|
field.Tag += ` bson:"_id,omitempty"`
|
|
} else {
|
|
if strings.HasPrefix(field.Description, "#bson:") {
|
|
|
|
command := strings.TrimPrefix(field.Description, "#bson:")
|
|
|
|
switch command {
|
|
case "ignore":
|
|
field.Tag = strings.TrimSuffix(field.Tag, `"`) + `,omitempty" bson:"-"`
|
|
}
|
|
} else {
|
|
field.Tag = strings.TrimSuffix(field.Tag, `"`) + `" bson:"` + field.Name + `,omitempty"`
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
return b
|
|
}
|
|
|
|
func main() {
|
|
cfg, err := config.LoadConfigFromDefaultLocations()
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, "❌ failed to load config", err.Error())
|
|
os.Exit(2)
|
|
}
|
|
|
|
p := modelgen.Plugin{
|
|
MutateHook: mutateHook,
|
|
}
|
|
|
|
err = api.Generate(cfg, api.ReplacePlugin(&p))
|
|
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err.Error())
|
|
os.Exit(3)
|
|
}
|
|
|
|
fmt.Println("✅ generator finished successfully")
|
|
os.Exit(0)
|
|
}
|