//go:build ignore package main import ( "fmt" "os" "strings" "git.farahty.com/nimer/go-mongo/utils" "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:"` + utils.Camelize(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) }