diff --git a/cmd/gf/internal/cmd/cmd_z_unit_gen_ctrl_test.go b/cmd/gf/internal/cmd/cmd_z_unit_gen_ctrl_test.go index 5dd89a0da..db2d8874b 100644 --- a/cmd/gf/internal/cmd/cmd_z_unit_gen_ctrl_test.go +++ b/cmd/gf/internal/cmd/cmd_z_unit_gen_ctrl_test.go @@ -82,3 +82,228 @@ func Test_Gen_Ctrl_Default(t *testing.T) { } }) } + +// https://github.com/gogf/gf/issues/3460 +func Test_Gen_Ctrl_UseMerge_Issue3460(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + var ( + ctrlPath = gfile.Temp(guid.S()) + //ctrlPath = gtest.DataPath("issue", "3460", "controller") + apiFolder = gtest.DataPath("issue", "3460", "api") + in = genctrl.CGenCtrlInput{ + SrcFolder: apiFolder, + DstFolder: ctrlPath, + WatchFile: "", + SdkPath: "", + SdkStdVersion: false, + SdkNoV1: false, + Clear: false, + Merge: true, + } + ) + + err := gfile.Mkdir(ctrlPath) + t.AssertNil(err) + defer gfile.Remove(ctrlPath) + + _, err = genctrl.CGenCtrl{}.Ctrl(ctx, in) + t.AssertNil(err) + + files, err := gfile.ScanDir(ctrlPath, "*.go", true) + t.AssertNil(err) + t.Assert(files, []string{ + filepath.Join(ctrlPath, "/hello/hello.go"), + filepath.Join(ctrlPath, "/hello/hello_new.go"), + filepath.Join(ctrlPath, "/hello/hello_v1_req.go"), + filepath.Join(ctrlPath, "/hello/hello_v2_req.go"), + }) + + expectCtrlPath := gtest.DataPath("issue", "3460", "controller") + expectFiles := []string{ + filepath.Join(expectCtrlPath, "/hello/hello.go"), + filepath.Join(expectCtrlPath, "/hello/hello_new.go"), + filepath.Join(expectCtrlPath, "/hello/hello_v1_req.go"), + filepath.Join(expectCtrlPath, "/hello/hello_v2_req.go"), + } + + // Line Feed maybe \r\n or \n + for i, expectFile := range expectFiles { + val := gfile.GetContents(files[i]) + expect := gfile.GetContents(expectFile) + t.Assert(val, expect) + } + }) +} + +// gf gen ctrl -m +// In the same module, different API files are added +func Test_Gen_Ctrl_UseMerge_AddNewFile(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + var ( + ctrlPath = gfile.Temp(guid.S()) + //ctrlPath = gtest.DataPath("issue", "3460", "controller") + apiFolder = gtest.DataPath("genctrl-merge", "add_new_file", "api") + in = genctrl.CGenCtrlInput{ + SrcFolder: apiFolder, + DstFolder: ctrlPath, + Merge: true, + } + ) + const testNewApiFile = ` +package v1 +import "github.com/gogf/gf/v2/frame/g" +type DictTypeAddReq struct { + g.Meta +} +type DictTypeAddRes struct { +} +` + + err := gfile.Mkdir(ctrlPath) + t.AssertNil(err) + defer gfile.Remove(ctrlPath) + + _, err = genctrl.CGenCtrl{}.Ctrl(ctx, in) + t.AssertNil(err) + + var ( + genApi = filepath.Join(apiFolder, "/dict/dict.go") + genApiExpect = filepath.Join(apiFolder, "/dict/dict_expect.go") + ) + defer gfile.Remove(genApi) + t.Assert(gfile.GetContents(genApi), gfile.GetContents(genApiExpect)) + + genCtrlFiles, err := gfile.ScanDir(ctrlPath, "*.go", true) + t.AssertNil(err) + t.Assert(genCtrlFiles, []string{ + filepath.Join(ctrlPath, "/dict/dict.go"), + filepath.Join(ctrlPath, "/dict/dict_new.go"), + filepath.Join(ctrlPath, "/dict/dict_v1_dict_type.go"), + }) + + expectCtrlPath := gtest.DataPath("genctrl-merge", "add_new_file", "controller") + expectFiles := []string{ + filepath.Join(expectCtrlPath, "/dict/dict.go"), + filepath.Join(expectCtrlPath, "/dict/dict_new.go"), + filepath.Join(expectCtrlPath, "/dict/dict_v1_dict_type.go"), + } + + // Line Feed maybe \r\n or \n + expectFilesContent(t, genCtrlFiles, expectFiles) + + // Add a new API file + newApiFilePath := filepath.Join(apiFolder, "/dict/v1/test_new.go") + err = gfile.PutContents(newApiFilePath, testNewApiFile) + t.AssertNil(err) + defer gfile.Remove(newApiFilePath) + + // Then execute the command + _, err = genctrl.CGenCtrl{}.Ctrl(ctx, in) + t.AssertNil(err) + + genApi = filepath.Join(apiFolder, "/dict.go") + genApiExpect = filepath.Join(apiFolder, "/dict_add_new_ctrl_expect.gotest") + + t.Assert(gfile.GetContents(genApi), gfile.GetContents(genApiExpect)) + + genCtrlFiles = append(genCtrlFiles, filepath.Join(ctrlPath, "/dict/dict_v1_test_new.go")) + // Use the gotest suffix, otherwise the IDE will delete the import + expectFiles = append(expectFiles, filepath.Join(expectCtrlPath, "/dict/dict_v1_test_new.gotest")) + // Line Feed maybe \r\n or \n + expectFilesContent(t, genCtrlFiles, expectFiles) + + }) + +} + +// gf gen ctrl -m +// In the same module, Add the same file to the API +func Test_Gen_Ctrl_UseMerge_AddNewCtrl(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + var ( + ctrlPath = gfile.Temp(guid.S()) + //ctrlPath = gtest.DataPath("issue", "3460", "controller") + apiFolder = gtest.DataPath("genctrl-merge", "add_new_ctrl", "api") + in = genctrl.CGenCtrlInput{ + SrcFolder: apiFolder, + DstFolder: ctrlPath, + Merge: true, + } + ) + + err := gfile.Mkdir(ctrlPath) + t.AssertNil(err) + defer gfile.Remove(ctrlPath) + + _, err = genctrl.CGenCtrl{}.Ctrl(ctx, in) + t.AssertNil(err) + + var ( + genApi = filepath.Join(apiFolder, "/dict/dict.go") + genApiExpect = filepath.Join(apiFolder, "/dict/dict_expect.go") + ) + defer gfile.Remove(genApi) + t.Assert(gfile.GetContents(genApi), gfile.GetContents(genApiExpect)) + + genCtrlFiles, err := gfile.ScanDir(ctrlPath, "*.go", true) + t.AssertNil(err) + t.Assert(genCtrlFiles, []string{ + filepath.Join(ctrlPath, "/dict/dict.go"), + filepath.Join(ctrlPath, "/dict/dict_new.go"), + filepath.Join(ctrlPath, "/dict/dict_v1_dict_type.go"), + }) + + expectCtrlPath := gtest.DataPath("genctrl-merge", "add_new_ctrl", "controller") + expectFiles := []string{ + filepath.Join(expectCtrlPath, "/dict/dict.go"), + filepath.Join(expectCtrlPath, "/dict/dict_new.go"), + filepath.Join(expectCtrlPath, "/dict/dict_v1_dict_type.go"), + } + + // Line Feed maybe \r\n or \n + expectFilesContent(t, genCtrlFiles, expectFiles) + + const testNewApiFile = ` + +type DictTypeAddReq struct { + g.Meta +} +type DictTypeAddRes struct { +} +` + dictModuleFileName := filepath.Join(apiFolder, "/dict/v1/dict_type.go") + // Save the contents of the file before the changes + apiFileContents := gfile.GetContents(dictModuleFileName) + + // Add a new API file + err = gfile.PutContentsAppend(dictModuleFileName, testNewApiFile) + t.AssertNil(err) + + //================================== + // Then execute the command + _, err = genctrl.CGenCtrl{}.Ctrl(ctx, in) + t.AssertNil(err) + + genApi = filepath.Join(apiFolder, "/dict.go") + genApiExpect = filepath.Join(apiFolder, "/dict_add_new_ctrl_expect.gotest") + t.Assert(gfile.GetContents(genApi), gfile.GetContents(genApiExpect)) + + // Use the gotest suffix, otherwise the IDE will delete the import + expectFiles[2] = filepath.Join(expectCtrlPath, "/dict/dict_v1_test_new.gotest") + // Line Feed maybe \r\n or \n + expectFilesContent(t, genCtrlFiles, expectFiles) + + // Restore the contents of the original API file + err = gfile.PutContents(dictModuleFileName, apiFileContents) + t.AssertNil(err) + }) + +} + +func expectFilesContent(t *gtest.T, paths []string, expectPaths []string) { + for i, expectFile := range expectPaths { + val := gfile.GetContents(paths[i]) + expect := gfile.GetContents(expectFile) + t.Assert(val, expect) + } +} diff --git a/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go b/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go index 5a71c2972..edaeb51a3 100644 --- a/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go +++ b/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go @@ -9,6 +9,7 @@ package genctrl import ( "fmt" "path/filepath" + "strings" "github.com/gogf/gf/cmd/gf/v2/internal/consts" "github.com/gogf/gf/cmd/gf/v2/internal/utility/mlog" @@ -42,8 +43,16 @@ func (c *controllerGenerator) Generate(dstModuleFolderPath string, apiModuleApiI ); err != nil { return } + + // use -merge + if merge { + err = c.doGenerateCtrlMergeItem(dstModuleFolderPath, subItems, doneApiItemSet) + continue + } + for _, subItem := range subItems { - if err = c.doGenerateCtrlItem(dstModuleFolderPath, subItem, merge); err != nil { + err = c.doGenerateCtrlItem(dstModuleFolderPath, subItem) + if err != nil { return } doneApiItemSet.Add(subItem.String()) @@ -116,7 +125,7 @@ func (c *controllerGenerator) doGenerateCtrlNewByModuleAndVersion( return } -func (c *controllerGenerator) doGenerateCtrlItem(dstModuleFolderPath string, item apiItem, merge bool) (err error) { +func (c *controllerGenerator) doGenerateCtrlItem(dstModuleFolderPath string, item apiItem) (err error) { var ( methodNameSnake = gstr.CaseSnake(item.MethodName) ctrlName = fmt.Sprintf(`Controller%s`, gstr.UcFirst(item.Version)) @@ -126,13 +135,6 @@ func (c *controllerGenerator) doGenerateCtrlItem(dstModuleFolderPath string, ite ) var content string - if merge { - methodFilePath = gfile.Join(dstModuleFolderPath, fmt.Sprintf( - `%s_%s_%s.go`, item.Module, item.Version, item.FileName, - )) - - } - if gfile.Exists(methodFilePath) { content = gstr.ReplaceByMap(consts.TemplateGenCtrlControllerMethodFuncMerge, g.MapStrStr{ "{Module}": item.Module, @@ -162,3 +164,64 @@ func (c *controllerGenerator) doGenerateCtrlItem(dstModuleFolderPath string, ite mlog.Printf(`generated: %s`, methodFilePath) return } + +// use -merge +func (c *controllerGenerator) doGenerateCtrlMergeItem(dstModuleFolderPath string, apiItems []apiItem, doneApiSet *gset.StrSet) (err error) { + + type controllerFileItem struct { + module string + version string + importPath string + // Each ctrlFileItem has multiple CTRLs + controllers strings.Builder + } + // It is possible that there are multiple files under one module + ctrlFileItemMap := make(map[string]*controllerFileItem) + + for _, api := range apiItems { + ctrlFileItem, found := ctrlFileItemMap[api.FileName] + if !found { + ctrlFileItem = &controllerFileItem{ + module: api.Module, + version: api.Version, + controllers: strings.Builder{}, + importPath: api.Import, + } + ctrlFileItemMap[api.FileName] = ctrlFileItem + } + + ctrl := gstr.TrimLeft(gstr.ReplaceByMap(consts.TemplateGenCtrlControllerMethodFuncMerge, g.MapStrStr{ + "{Module}": api.Module, + "{CtrlName}": fmt.Sprintf(`Controller%s`, gstr.UcFirst(api.Version)), + "{Version}": api.Version, + "{MethodName}": api.MethodName, + })) + ctrlFileItem.controllers.WriteString(ctrl) + doneApiSet.Add(api.String()) + } + + for ctrlFileName, ctrlFileItem := range ctrlFileItemMap { + ctrlFilePath := gfile.Join(dstModuleFolderPath, fmt.Sprintf( + `%s_%s_%s.go`, ctrlFileItem.module, ctrlFileItem.version, ctrlFileName, + )) + + // This logic is only followed when a new ctrlFileItem is generated + // Most of the rest of the time, the following logic is followed + if !gfile.Exists(ctrlFilePath) { + ctrlFileHeader := gstr.TrimLeft(gstr.ReplaceByMap(consts.TemplateGenCtrlControllerHeader, g.MapStrStr{ + "{Module}": ctrlFileItem.module, + "{ImportPath}": ctrlFileItem.importPath, + })) + err = gfile.PutContents(ctrlFilePath, ctrlFileHeader) + if err != nil { + return err + } + } + + if err = gfile.PutContentsAppend(ctrlFilePath, ctrlFileItem.controllers.String()); err != nil { + return err + } + mlog.Printf(`generated: %s`, ctrlFilePath) + } + return +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/dict_add_new_ctrl_expect.gotest b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/dict_add_new_ctrl_expect.gotest new file mode 100644 index 000000000..f6a0a55f7 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/dict_add_new_ctrl_expect.gotest @@ -0,0 +1,17 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package dict + +import ( + "context" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1" +) + +type IDictV1 interface { + DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) + DictTypeAdd(ctx context.Context, req *v1.DictTypeAddReq) (res *v1.DictTypeAddRes, err error) +} + diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/dict_expect.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/dict_expect.go new file mode 100644 index 000000000..8c69b527c --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/dict_expect.go @@ -0,0 +1,15 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package dict + +import ( + "context" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1" +) + +type IDictV1 interface { + DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1/dict_type.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1/dict_type.go new file mode 100644 index 000000000..459ced86e --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1/dict_type.go @@ -0,0 +1,17 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package v1 + +import "github.com/gogf/gf/v2/frame/g" + +type DictTypeAddPageReq struct { + g.Meta `path:"/dict/type/add" tags:"字典管理" method:"get" summary:"字典类型添加页面"` +} + +type DictTypeAddPageRes struct { + g.Meta `mime:"text/html" type:"string" example:""` +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict.go new file mode 100644 index 000000000..b280a5315 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict.go @@ -0,0 +1,5 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dict diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_new.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_new.go new file mode 100644 index 000000000..cf966e0f2 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_new.go @@ -0,0 +1,15 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dict + +import ( + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict" +) + +type ControllerV1 struct{} + +func NewV1() dict.IDictV1 { + return &ControllerV1{} +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_v1_dict_type.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_v1_dict_type.go new file mode 100644 index 000000000..56b407945 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_v1_dict_type.go @@ -0,0 +1,14 @@ +package dict + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1" +) + +func (c *ControllerV1) DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_v1_test_new.gotest b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_v1_test_new.gotest new file mode 100644 index 000000000..12c2fad89 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_ctrl/controller/dict/dict_v1_test_new.gotest @@ -0,0 +1,17 @@ +package dict + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1" +) + +func (c *ControllerV1) DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} +func (c *ControllerV1) DictTypeAdd(ctx context.Context, req *v1.DictTypeAddReq) (res *v1.DictTypeAddRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/dict_add_new_ctrl_expect.gotest b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/dict_add_new_ctrl_expect.gotest new file mode 100644 index 000000000..f6a0a55f7 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/dict_add_new_ctrl_expect.gotest @@ -0,0 +1,17 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package dict + +import ( + "context" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_ctrl/api/dict/v1" +) + +type IDictV1 interface { + DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) + DictTypeAdd(ctx context.Context, req *v1.DictTypeAddReq) (res *v1.DictTypeAddRes, err error) +} + diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/dict_expect.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/dict_expect.go new file mode 100644 index 000000000..c41eb0571 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/dict_expect.go @@ -0,0 +1,15 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package dict + +import ( + "context" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/v1" +) + +type IDictV1 interface { + DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/v1/dict_type.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/v1/dict_type.go new file mode 100644 index 000000000..459ced86e --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/v1/dict_type.go @@ -0,0 +1,17 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package v1 + +import "github.com/gogf/gf/v2/frame/g" + +type DictTypeAddPageReq struct { + g.Meta `path:"/dict/type/add" tags:"字典管理" method:"get" summary:"字典类型添加页面"` +} + +type DictTypeAddPageRes struct { + g.Meta `mime:"text/html" type:"string" example:""` +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict.go new file mode 100644 index 000000000..b280a5315 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict.go @@ -0,0 +1,5 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dict diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_new.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_new.go new file mode 100644 index 000000000..8cf1e87fc --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_new.go @@ -0,0 +1,15 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dict + +import ( + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict" +) + +type ControllerV1 struct{} + +func NewV1() dict.IDictV1 { + return &ControllerV1{} +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_v1_dict_type.go b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_v1_dict_type.go new file mode 100644 index 000000000..507d8e4be --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_v1_dict_type.go @@ -0,0 +1,14 @@ +package dict + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/v1" +) + +func (c *ControllerV1) DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_v1_test_new.gotest b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_v1_test_new.gotest new file mode 100644 index 000000000..13cac3c7c --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl-merge/add_new_file/controller/dict/dict_v1_test_new.gotest @@ -0,0 +1,14 @@ +package dict + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl-merge/add_new_file/api/dict/v1" +) + +func (c *ControllerV1) DictTypeAdd(ctx context.Context, req *v1.DictTypeAddReq) (res *v1.DictTypeAddRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/hello.go b/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/hello.go new file mode 100644 index 000000000..206b2f54a --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/hello.go @@ -0,0 +1,26 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package hello + +import ( + "context" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/issue/3460/api/hello/v1" + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/issue/3460/api/hello/v2" +) + +type IHelloV1 interface { + DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) + DictTypeAdd(ctx context.Context, req *v1.DictTypeAddReq) (res *v1.DictTypeAddRes, err error) + DictTypeEditPage(ctx context.Context, req *v1.DictTypeEditPageReq) (res *v1.DictTypeEditPageRes, err error) + DictTypeEdit(ctx context.Context, req *v1.DictTypeEditReq) (res *v1.DictTypeEditRes, err error) +} + +type IHelloV2 interface { + DictTypeAddPage(ctx context.Context, req *v2.DictTypeAddPageReq) (res *v2.DictTypeAddPageRes, err error) + DictTypeAdd(ctx context.Context, req *v2.DictTypeAddReq) (res *v2.DictTypeAddRes, err error) + DictTypeEditPage(ctx context.Context, req *v2.DictTypeEditPageReq) (res *v2.DictTypeEditPageRes, err error) + DictTypeEdit(ctx context.Context, req *v2.DictTypeEditReq) (res *v2.DictTypeEditRes, err error) +} diff --git a/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v1/req.go b/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v1/req.go new file mode 100644 index 000000000..33c2795fe --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v1/req.go @@ -0,0 +1,37 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package v1 + +import "github.com/gogf/gf/v2/frame/g" + +type DictTypeAddPageReq struct { + g.Meta `path:"/dict/type/add" tags:"字典管理" method:"get" summary:"字典类型添加页面"` +} + +type DictTypeAddPageRes struct { + g.Meta `mime:"text/html" type:"string" example:""` +} + +type DictTypeAddReq struct { + g.Meta `path:"/dict/type/add" tags:"字典管理" method:"post" summary:"添加字典类型"` +} +type DictTypeAddRes struct { +} + +type DictTypeEditPageReq struct { + g.Meta `path:"/dict/type/edit" tags:"字典管理" method:"get" summary:"字典类型添加页面"` +} + +type DictTypeEditPageRes struct { + g.Meta `mime:"text/html" type:"string" example:""` +} + +type DictTypeEditReq struct { + g.Meta `path:"/dict/type/edit" tags:"字典管理" method:"put" summary:"修改字典类型"` +} +type DictTypeEditRes struct { +} diff --git a/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v2/req.go b/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v2/req.go new file mode 100644 index 000000000..2764c5397 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/3460/api/hello/v2/req.go @@ -0,0 +1,37 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package v2 + +import "github.com/gogf/gf/v2/frame/g" + +type DictTypeAddPageReq struct { + g.Meta `path:"/dict/type/add" tags:"字典管理" method:"get" summary:"字典类型添加页面"` +} + +type DictTypeAddPageRes struct { + g.Meta `mime:"text/html" type:"string" example:""` +} + +type DictTypeAddReq struct { + g.Meta `path:"/dict/type/add" tags:"字典管理" method:"post" summary:"添加字典类型"` +} +type DictTypeAddRes struct { +} + +type DictTypeEditPageReq struct { + g.Meta `path:"/dict/type/edit" tags:"字典管理" method:"get" summary:"字典类型添加页面"` +} + +type DictTypeEditPageRes struct { + g.Meta `mime:"text/html" type:"string" example:""` +} + +type DictTypeEditReq struct { + g.Meta `path:"/dict/type/edit" tags:"字典管理" method:"put" summary:"修改字典类型"` +} +type DictTypeEditRes struct { +} diff --git a/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello.go b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello.go new file mode 100644 index 000000000..f72082fbf --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello.go @@ -0,0 +1,5 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package hello diff --git a/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_new.go b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_new.go new file mode 100644 index 000000000..6774d9183 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_new.go @@ -0,0 +1,21 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package hello + +import ( + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/issue/3460/api/hello" +) + +type ControllerV1 struct{} + +func NewV1() hello.IHelloV1 { + return &ControllerV1{} +} + +type ControllerV2 struct{} + +func NewV2() hello.IHelloV2 { + return &ControllerV2{} +} diff --git a/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v1_req.go b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v1_req.go new file mode 100644 index 000000000..1ff04f7b8 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v1_req.go @@ -0,0 +1,23 @@ +package hello + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/issue/3460/api/hello/v1" +) + +func (c *ControllerV1) DictTypeAddPage(ctx context.Context, req *v1.DictTypeAddPageReq) (res *v1.DictTypeAddPageRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} +func (c *ControllerV1) DictTypeAdd(ctx context.Context, req *v1.DictTypeAddReq) (res *v1.DictTypeAddRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} +func (c *ControllerV1) DictTypeEditPage(ctx context.Context, req *v1.DictTypeEditPageReq) (res *v1.DictTypeEditPageRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} +func (c *ControllerV1) DictTypeEdit(ctx context.Context, req *v1.DictTypeEditReq) (res *v1.DictTypeEditRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v2_req.go b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v2_req.go new file mode 100644 index 000000000..a38fb1f4b --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/issue/3460/controller/hello/hello_v2_req.go @@ -0,0 +1,23 @@ +package hello + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/issue/3460/api/hello/v2" +) + +func (c *ControllerV2) DictTypeAddPage(ctx context.Context, req *v2.DictTypeAddPageReq) (res *v2.DictTypeAddPageRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} +func (c *ControllerV2) DictTypeAdd(ctx context.Context, req *v2.DictTypeAddReq) (res *v2.DictTypeAddRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} +func (c *ControllerV2) DictTypeEditPage(ctx context.Context, req *v2.DictTypeEditPageReq) (res *v2.DictTypeEditPageRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} +func (c *ControllerV2) DictTypeEdit(ctx context.Context, req *v2.DictTypeEditReq) (res *v2.DictTypeEditRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/consts/consts_gen_ctrl_template.go b/cmd/gf/internal/consts/consts_gen_ctrl_template.go index 919799255..da0429ee9 100644 --- a/cmd/gf/internal/consts/consts_gen_ctrl_template.go +++ b/cmd/gf/internal/consts/consts_gen_ctrl_template.go @@ -51,6 +51,20 @@ func (c *{CtrlName}) {MethodName}(ctx context.Context, req *{Version}.{MethodNam } ` +const TemplateGenCtrlControllerHeader = ` +package {Module} + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "{ImportPath}" +) + +` + const TemplateGenCtrlControllerMethodFuncMerge = ` func (c *{CtrlName}) {MethodName}(ctx context.Context, req *{Version}.{MethodName}Req) (res *{Version}.{MethodName}Res, err error) {