//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) }