go-mongo/generate.go

83 lines
1.9 KiB
Go

//go:build ignore
package main
import (
"fmt"
"os"
"strings"
"github.com/99designs/gqlgen/api"
"github.com/99designs/gqlgen/codegen/config"
"github.com/99designs/gqlgen/plugin/modelgen"
)
var modelsWithID []string
func mutateHook(b *modelgen.ModelBuild) *modelgen.ModelBuild {
for _, model := range b.Models {
hasID := false
for _, field := range model.Fields {
if field.Name == "id" {
field.Tag = `json:"id,omitempty" bson:"_id,omitempty"`
hasID = true
} else {
if strings.HasPrefix(field.Description, "#bson:") {
command := strings.TrimPrefix(field.Description, "#bson:")
if strings.TrimSpace(command) == "ignore" {
field.Tag = strings.TrimSuffix(field.Tag, `"`) + `,omitempty" bson:"-"`
}
} else {
field.Tag = strings.TrimSuffix(field.Tag, `"`) + `" bson:"` + field.Name + `,omitempty"`
}
}
}
if hasID {
modelsWithID = append(modelsWithID, model.Name)
}
}
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))
// f, err := os.Create("models/getid_gen.go")
// if err != nil {
// fmt.Fprintln(os.Stderr, "❌ failed to create getid_gen.go:", err)
// os.Exit(4)
// }
// defer f.Close()
// f.WriteString("// Code generated by gqlgen. DO NOT EDIT.\n\n")
// f.WriteString("package models\n\n")
// f.WriteString("import \"go.mongodb.org/mongo-driver/bson/primitive\"\n\n")
// for _, model := range modelsWithID {
// f.WriteString(fmt.Sprintf("func (m *%s) GetID() primitive.ObjectID {\n", model))
// f.WriteString(" return m.ID\n")
// f.WriteString("}\n\n")
// }
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
os.Exit(3)
}
fmt.Println("✅ generator finished successfully")
os.Exit(0)
}