1 Star 0 Fork 0

mchong/gin-admin-cli

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
entity.go 7.31 KB
一键复制 编辑 原始数据 按行查看 历史
Mchong 提交于 2019-09-13 22:19 +08:00 . bugfix
package generate
import (
"bytes"
"context"
"fmt"
"gitee.com/mchongjs/gin-admin-cli/util"
)
type entityField struct {
Name string // 字段名
Comment string // 字段注释
Type string // 字段类型
GormOptions string // gorm配置项(不包含column)
InShort bool //存在于短结构中
}
func getEntityFileName(dir, name string) string {
fullname := fmt.Sprintf("%s/internal/app/model/impl/gorm/internal/entity/e_%s.go", dir, util.ToLowerUnderlinedNamer(name))
return fullname
}
// 生成entity文件
func genEntity(ctx context.Context, pkgName, dir string, item TplItem) error {
name := item.StructName
comment := item.Comment
fields := item.toEntityFields()
hasselect := item.HasSelect
shortname := name + "_short"
if len(fields) == 0 {
fields = []entityField{
{Name: "RecordID", Comment: "记录ID", Type: "string", GormOptions: "size:36;index;"},
{Name: "Creator", Comment: "创建者", Type: "string", GormOptions: "size:36;index;"},
}
}
buf := new(bytes.Buffer)
var imports []string
imports = append(imports, `"context"`)
imports = append(imports, fmt.Sprintf(`"%s/internal/app/schema"`, pkgName))
imports = append(imports, fmt.Sprintf(`"%s/pkg/gormplus"`, pkgName))
buf.Write(getModuleHeader("entity", imports...).Bytes())
buf.WriteString(fmt.Sprintf("// Get%sDB %s", name, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func Get%sDB(ctx context.Context, defDB *gormplus.DB) *gormplus.DB {", name))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("return getDBWithModel(ctx, defDB, %s{})", name))
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("// Schema%s %s", name, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("type Schema%s schema.%s", name, name))
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("// To%s 转换为%s实体", name, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func (a Schema%s) To%s() *%s {", name, name, name))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("item := &%s{", name))
buf.WriteString(delimiter)
for _, field := range fields {
if field.Name != "Id" {
buf.WriteString(fmt.Sprintf("%s: &a.%s,", field.Name, field.Name))
buf.WriteString(delimiter)
}else {
buf.WriteString("Model: Model{Id:a.Id,},")
buf.WriteString(delimiter)
}
}
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("return item"))
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("// %s %s实体", name, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("type %s struct {", name))
buf.WriteString(delimiter)
buf.WriteString("Model")
buf.WriteString(delimiter)
for _, field := range fields {
if field.Name != "Id" {
buf.WriteString(fmt.Sprintf("%s *%s", field.Name, field.Type))
buf.WriteByte('`')
buf.WriteString(fmt.Sprintf(`gorm:"column:%s;%s"`, util.ToLowerUnderlinedNamer(field.Name), field.GormOptions))
buf.WriteByte('`')
buf.WriteString(fmt.Sprintf(" // %s", field.Comment))
buf.WriteString(delimiter)
}
}
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func (a %s) String() string {", name))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("return toString(a)"))
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString("// TableName 表名")
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func (a %s) TableName() string {", name))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf(`return a.Model.TableName("%s")`, util.ToLowerUnderlinedNamer(name)))
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("// ToSchema%s 转换为%s对象", name, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func (a %s) ToSchema%s() *schema.%s {", name, name, name))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("item := &schema.%s{", name))
buf.WriteString(delimiter)
for _, field := range fields {
if field.Name != "Id" {
buf.WriteString(fmt.Sprintf("%s: *a.%s,", field.Name, field.Name))
buf.WriteString(delimiter)
}else {
buf.WriteString(fmt.Sprintf("%s: a.%s,", field.Name, field.Name))
buf.WriteString(delimiter)
}
}
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString("return item")
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
pluralName := util.ToPlural(name)
pluralshortName := pluralName + "short"
buf.WriteString(fmt.Sprintf("// %s %s列表", pluralName, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("type %s []*%s", pluralName, name))
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("// ToSchema%s 转换为%s对象列表", pluralName, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func (a %s) ToSchema%s() []*schema.%s {", pluralName, pluralName, name))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("list := make([]*schema.%s, len(a))", name))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("for i, item := range a {"))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("list[i] = item.ToSchema%s()", name))
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString("return list")
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
//创建短结构
if hasselect {
buf.WriteString(fmt.Sprintf("// ToSchema%s 转换为%s对象", shortname, comment + "short"))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func (a %s) ToSchema%s() *schema.%s {", shortname, shortname, shortname))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("item := &schema.%s{", shortname))
buf.WriteString(delimiter)
for _, field := range fields {
if field.InShort {
buf.WriteString(fmt.Sprintf("%s: *a.%s,", field.Name, field.Name))
buf.WriteString(delimiter)
}
}
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString("return item")
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("// ToSchema%s 转换为%s对象列表", pluralshortName, comment))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("func (a %s) ToSchema%s() []*schema.%s {", pluralName, pluralshortName, shortname))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("list := make([]*schema.%s, len(a))", shortname))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("for i, item := range a {"))
buf.WriteString(delimiter)
buf.WriteString(fmt.Sprintf("list[i] = item.ToSchema%s()", shortname))
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString("return list")
buf.WriteString(delimiter)
buf.WriteByte('}')
buf.WriteString(delimiter)
buf.WriteString(delimiter)
}
fullname := getEntityFileName(dir, name)
err := createFile(ctx, fullname, buf)
if err != nil {
return err
}
fmt.Printf("文件[%s]写入成功\n", fullname)
return execGoFmt(fullname)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/mchongjs/gin-admin-cli.git
git@gitee.com:mchongjs/gin-admin-cli.git
mchongjs
gin-admin-cli
gin-admin-cli
a13bc20d66c4

搜索帮助