func export support

支持快捷函数导出。
This commit is contained in:
谢小军
2020-01-09 20:04:33 +08:00
parent 204164e8b9
commit 1ff17da96f
15 changed files with 932 additions and 44 deletions

View File

@@ -208,11 +208,7 @@ func (m *_Model) generateFunc() (genOut []GenOutInfo) {
pkg.AddImport(`"github.com/jinzhu/gorm"`)
pkg.AddImport(`"fmt"`)
data := struct {
StructName string
TableName string
Em []ColumusInfo
}{
data := funDef{
StructName: getCamelName(tab.Name),
TableName: tab.Name,
}
@@ -220,17 +216,57 @@ func (m *_Model) generateFunc() (genOut []GenOutInfo) {
for _, el := range tab.Em {
if strings.EqualFold(el.Type, "gorm.Model") {
data.Em = append(data.Em, getGormModelElement()...)
pkg.AddImport(`"time"`)
} else {
data.Em = append(data.Em, el)
if v2, ok := cnf.EImportsHead[el.Type]; ok {
isMulti := true
for _, v1 := range el.Index {
switch v1.Key {
// case ColumusKeyDefault:
case ColumusKeyPrimary: // primary key.主键
isMulti = false
case ColumusKeyUnique: // unique key.唯一索引
isMulti = false
//case ColumusKeyIndex: // index key.复合索引
case ColumusKeyUniqueIndex: // unique index key.唯一复合索引
isMulti = false
}
}
typeName := getTypeName(el.Type)
data.Em = append(data.Em, EmInfo{
IsMulti: isMulti,
Notes: el.Notes,
Type: typeName, // Type.类型标记
ColName: el.Name,
ColStructName: getCamelName(el.Name),
})
if v2, ok := cnf.EImportsHead[typeName]; ok {
if len(v2) > 0 {
pkg.AddImport(v2)
}
}
}
// 外键列表
for _, v := range el.ForeignKeyList {
isMulti, isFind, notes := m.getColumusKeyMulti(v.TableName, v.ColumnName)
if isFind {
var info PreloadInfo
info.IsMulti = isMulti
info.Notes = notes
info.ForeignkeyTableName = v.TableName
info.ForeignkeyCol = v.ColumnName
info.ForeignkeyStructName = getCamelName(v.TableName)
info.ColName = el.Name
info.ColStructName = getCamelName(el.Name)
data.PreloadList = append(data.PreloadList, info)
}
}
// ---------end--
}
tmpl, err := template.New("gen_logic").Parse(genfunc.GetGenLogicTemp())
tmpl, err := template.New("gen_logic").Funcs(template.FuncMap{"GenPreloadList": GenPreloadList}).Parse(genfunc.GetGenLogicTemp())
if err != nil {
panic(err)
}
@@ -239,10 +275,26 @@ func (m *_Model) generateFunc() (genOut []GenOutInfo) {
pkg.AddFuncStr(buf.String())
genOut = append(genOut, GenOutInfo{
FileName: fmt.Sprintf("gen.%v.go", tab.Name),
FileName: fmt.Sprintf(m.info.DbName+".gen.%v.go", tab.Name),
FileCtx: pkg.Generate(),
})
}
return
}
// GenPreloadList 生成list
func GenPreloadList(list []PreloadInfo, multi bool) string {
if len(list) > 0 {
tmpl, err := template.New("gen_preload").Parse(genfunc.GetGenPreloadTemp(multi))
if err != nil {
panic(err)
}
var buf bytes.Buffer
tmpl.Execute(&buf, list)
return buf.String()
}
return ""
}