Files
bj_power/bj_power_wms/tools/generate.go
T

70 lines
1.7 KiB
Go
Raw Normal View History

//go:build entgenerate
2026-08-28 15:06:01 +08:00
package main
import (
"fmt"
2026-08-28 15:06:01 +08:00
"log"
"strings"
2026-08-28 15:06:01 +08:00
"entgo.io/ent/entc"
"entgo.io/ent/entc/gen"
)
// camel 把 snake_case 的字段名/边名转成 camelCase。
// 项目约定:接口 JSON 一律 camelCase(见《技术约束.md》),
// 而 ent 默认生成的 json tag 是 snake_case,这里统一覆盖。
func camel(s string) string {
parts := strings.Split(s, "_")
for i := 1; i < len(parts); i++ {
if parts[i] != "" {
parts[i] = strings.ToUpper(parts[i][:1]) + parts[i][1:]
}
}
return strings.Join(parts, "")
}
// camelJSON 扩展:为所有字段与边设置 camelCase 的 json tag。
type camelJSON struct {
entc.DefaultExtension
}
func (camelJSON) Hooks() []gen.Hook {
return []gen.Hook{
func(next gen.Generator) gen.Generator {
return gen.GenerateFunc(func(g *gen.Graph) error {
for _, n := range g.Nodes {
for _, f := range n.Fields {
// schema 中显式声明的标签(如 json:"-")不覆盖
if f.StructTag != "" && strings.Contains(f.StructTag, `json:"-"`) {
continue
}
f.StructTag = fmt.Sprintf("json:%q", camel(f.Name)+",omitempty")
}
for _, e := range n.Edges {
if e.StructTag != "" && strings.Contains(e.StructTag, `json:"-"`) {
continue
}
e.StructTag = fmt.Sprintf("json:%q", camel(e.Name)+",omitempty")
}
}
return next.Generate(g)
})
},
}
}
2026-08-28 15:06:01 +08:00
func main() {
err := entc.Generate("./schema", &gen.Config{
Package: "bj_power_wms/ent",
Target: "./ent",
Features: []gen.Feature{
gen.FeatureVersionedMigration,
gen.FeatureUpsert,
},
}, entc.Extensions(camelJSON{}))
2026-08-28 15:06:01 +08:00
if err != nil {
log.Fatalf("running ent codegen: %v", err)
}
}