go-mongo/generate.go
2025-05-31 18:38:18 +03:00

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