84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
//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)
|
|
}
|