Files
bj_power/bj_power_wms/tools/generate.go
T
SunYF bb22148625 feat: 完成区域管理、装箱功能优化与接口标准化
- 新增区域状态字段与增删改查接口,支持区域启用/停用
- 重构实体字段JSON标签为camelCase格式统一接口规范
- 优化入库、盘点、装箱流程的交互与提示文案
- 新增装箱管理功能,支持合同号关联与装箱编辑
- 调整前端菜单与帮助文档适配业务场景变更
2026-09-01 13:49:44 +08:00

70 lines
1.7 KiB
Go

//go:build entgenerate
package main
import (
"fmt"
"log"
"strings"
"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)
})
},
}
}
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{}))
if err != nil {
log.Fatalf("running ent codegen: %v", err)
}
}