未验证 提交 c4ab8875 编写于 作者: Mr.奇淼('s avatar Mr.奇淼( 提交者: GitHub

Merge pull request #588 from songzhibin97/gva_gormv2_dev

feat:增加自动注入代码段
...@@ -73,7 +73,7 @@ local: ...@@ -73,7 +73,7 @@ local:
autocode: autocode:
transfer-restart: true transfer-restart: true
root: "" root: ""
server: /server/autocode server: /server
server-api: /api/v1/autocode server-api: /api/v1/autocode
server-initialize: /initialize server-initialize: /initialize
server-model: /model/autocode server-model: /model/autocode
......
...@@ -19,10 +19,56 @@ import ( ...@@ -19,10 +19,56 @@ import (
) )
const ( const (
autoPath = "autoCode/" autoPath = "autocode_template/"
basePath = "resource/template" basePath = "resource/template"
) )
var injectionPaths []injectionMeta
func Init() {
if len(injectionPaths) != 0 {
return
}
injectionPaths = []injectionMeta{
{
path: filepath.Join(global.GVA_CONFIG.AutoCode.Root,
global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "gorm.go"),
funcName: "MysqlTables",
structNameF: "autocode.%s{},",
},
{
path: filepath.Join(global.GVA_CONFIG.AutoCode.Root,
global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "router.go"),
funcName: "Routers",
structNameF: "autocodeRouter.Init%sRouter(PrivateGroup)",
},
{
path: filepath.Join(global.GVA_CONFIG.AutoCode.Root,
global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SApi, "enter.go"),
funcName: "ApiGroup",
structNameF: "%sApi",
},
{
path: filepath.Join(global.GVA_CONFIG.AutoCode.Root,
global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SRouter, "enter.go"),
funcName: "RouterGroup",
structNameF: "%sRouter",
},
{
path: filepath.Join(global.GVA_CONFIG.AutoCode.Root,
global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SService, "enter.go"),
funcName: "ServiceGroup",
structNameF: "%sService",
},
}
}
type injectionMeta struct {
path string
funcName string
structNameF string // 带格式化的
}
type tplData struct { type tplData struct {
template *template.Template template *template.Template
locationPath string locationPath string
...@@ -142,6 +188,7 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc ...@@ -142,6 +188,7 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc
idBf.WriteString(";") idBf.WriteString(";")
} }
if autoCode.AutoMoveFile { // 判断是否需要自动转移 if autoCode.AutoMoveFile { // 判断是否需要自动转移
Init()
for index := range dataList { for index := range dataList {
autoCodeService.addAutoMoveFile(&dataList[index]) autoCodeService.addAutoMoveFile(&dataList[index])
} }
...@@ -150,23 +197,10 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc ...@@ -150,23 +197,10 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc
return err return err
} }
} }
initializeGormFilePath := filepath.Join(global.GVA_CONFIG.AutoCode.Root, err = injectionCode(autoCode.StructName, &injectionCodeMeta)
global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "gorm.go")
initializeRouterFilePath := filepath.Join(global.GVA_CONFIG.AutoCode.Root,
global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "router.go")
err = utils.AutoInjectionCode(initializeGormFilePath, "MysqlTables", "model."+autoCode.StructName+"{},")
if err != nil {
return err
}
err = utils.AutoInjectionCode(initializeRouterFilePath, "Routers", "router.Init"+autoCode.StructName+"Router(PrivateGroup)")
if err != nil { if err != nil {
return err return
} }
injectionCodeMeta.WriteString(fmt.Sprintf("%s@%s@%s", initializeGormFilePath, "MysqlTables", "model."+autoCode.StructName+"{},"))
injectionCodeMeta.WriteString(";")
injectionCodeMeta.WriteString(fmt.Sprintf("%s@%s@%s", initializeRouterFilePath, "Routers", "router.Init"+autoCode.StructName+"Router(PrivateGroup)"))
// 保存生成信息 // 保存生成信息
for _, data := range dataList { for _, data := range dataList {
if len(data.autoMoveFilePath) != 0 { if len(data.autoMoveFilePath) != 0 {
...@@ -180,7 +214,6 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc ...@@ -180,7 +214,6 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc
_ = utils.Reload() _ = utils.Reload()
}() }()
} }
//return errors.New("创建代码成功并移动文件成功")
} else { // 打包 } else { // 打包
if err = utils.ZipFiles("./ginvueadmin.zip", fileList, ".", "."); err != nil { if err = utils.ZipFiles("./ginvueadmin.zip", fileList, ".", "."); err != nil {
return err return err
...@@ -414,7 +447,6 @@ func (autoCodeService *AutoCodeService) getNeedList(autoCode *system.AutoCodeStr ...@@ -414,7 +447,6 @@ func (autoCodeService *AutoCodeService) getNeedList(autoCode *system.AutoCodeStr
// 生成文件路径,填充 autoCodePath 字段,readme.txt.tpl不符合规则,需要特殊处理 // 生成文件路径,填充 autoCodePath 字段,readme.txt.tpl不符合规则,需要特殊处理
// resource/template/web/api.js.tpl -> autoCode/web/autoCode.PackageName/api/autoCode.PackageName.js // resource/template/web/api.js.tpl -> autoCode/web/autoCode.PackageName/api/autoCode.PackageName.js
// resource/template/readme.txt.tpl -> autoCode/readme.txt // resource/template/readme.txt.tpl -> autoCode/readme.txt
autoPath := "autoCode/"
for index, value := range dataList { for index, value := range dataList {
trimBase := strings.TrimPrefix(value.locationPath, basePath+"/") trimBase := strings.TrimPrefix(value.locationPath, basePath+"/")
if trimBase == "readme.txt.tpl" { if trimBase == "readme.txt.tpl" {
...@@ -447,3 +479,15 @@ func (autoCodeService *AutoCodeService) getNeedList(autoCode *system.AutoCodeStr ...@@ -447,3 +479,15 @@ func (autoCodeService *AutoCodeService) getNeedList(autoCode *system.AutoCodeStr
} }
return dataList, fileList, needMkdir, err return dataList, fileList, needMkdir, err
} }
// injectionCode 封装代码注入
func injectionCode(structName string, bf *strings.Builder) error {
for _, meta := range injectionPaths {
code := fmt.Sprintf(meta.structNameF, structName)
if err := utils.AutoInjectionCode(meta.path, meta.funcName, code); err != nil {
return err
}
bf.WriteString(fmt.Sprintf("%s@%s@%s;", meta.path, meta.funcName, code))
}
return nil
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册