فهرست منبع

refactor: 修改生成模板文件后缀名

runningwater 7 ماه پیش
والد
کامیت
2f4818ca25

+ 5 - 0
README.md

@@ -29,6 +29,11 @@ Web 服务功能会封装到子命令 serve 中,命令行功能会封装到子
 - Panic Recovery
 - Import package update
 
+### 💼 其他
+
+- 修改生成模板文件后缀名
+- 更新 readme.md  文档
+
 ### 📚 文档更新
 
 - Add README  文档

+ 4 - 3
app/cmd/make/make.go

@@ -56,7 +56,7 @@ type Model struct {
 
 // stubsFS 方便我们后面打包的 .stub 为后缀的文件
 //
-//go:embed stubs
+//go:embed tpls
 var stubsFS embed.FS
 
 var CmdMake = &cobra.Command{
@@ -68,6 +68,7 @@ func init() {
 	// 注册 make 子命令
 	CmdMake.AddCommand(
 		CmdMakeCMD,
+		CmdMakeModel,
 	)
 }
 
@@ -87,7 +88,7 @@ func makeModelFromString(name string) Model {
 
 // createFileFromStub 读取 stub 文件并进行变量替换
 // 最后个选项可选参数,允许用户传递变量替换
-func createFileFromStub(filePath, stubName string, model Model, vars ...map[string]string) {
+func createFileFromStub(filePath, tplName string, model Model, vars ...map[string]string) {
 
 	replaces := make(map[string]string)
 	if len(vars) > 0 {
@@ -104,7 +105,7 @@ func createFileFromStub(filePath, stubName string, model Model, vars ...map[stri
 	}
 
 	// 读取 stub 文件内容
-	stub, err := stubsFS.ReadFile("stubs/" + stubName + ".stub")
+	stub, err := stubsFS.ReadFile("tpls/" + tplName + ".tpl")
 	if err != nil {
 		console.Exit(err.Error())
 	}

+ 29 - 0
app/cmd/make/make_model.go

@@ -0,0 +1,29 @@
+package make
+
+import (
+	"fmt"
+	"os"
+
+	"github.com/spf13/cobra"
+)
+
+var CmdMakeModel = &cobra.Command{
+	Use:   "model",
+	Short: "Create model file, example: make model user",
+	Run:   runMakeModel,
+	Args:  cobra.ExactArgs(1), // 只允许且必须传 1 个参数
+}
+
+func runMakeModel(cmd *cobra.Command, args []string) {
+	// 格式化模型名称,返回一个 Model 实例
+	model := makeModelFromString(args[0])
+
+	// 目录, 例如: `app/models/user/`
+	dir := fmt.Sprintf("app/models/%s/", model.PackageName)
+	os.MkdirAll(dir, os.ModePerm)
+
+	// 替换变量
+	createFileFromStub(dir+model.PackageName+"_model.go", "model/model", model)
+	createFileFromStub(dir+model.PackageName+"_util.go", "model/model_util", model)
+	createFileFromStub(dir+model.PackageName+"_hooks.go", "model/model_hooks", model)
+}

app/cmd/make/stubs/cmd.stub → app/cmd/make/tpls/cmd.tpl


+ 30 - 0
app/cmd/make/tpls/model/model.tpl

@@ -0,0 +1,30 @@
+//Package {{PackageName}} 模型
+package {{PackageName}}
+
+import (
+	"github.com/runningwater/gohub/app/models"
+	"github.com/runningwater/gohub/pkg/database"
+)
+
+type {{StructName}} struct {
+    models.BaseModel
+
+    // Put fields in here
+    // FIXME()
+
+    models.CommonTimestampsField
+}
+
+func ({{VariableName}} *{{StructName}}) Create() {
+    database.DB.Create(&{{VariableName}})
+}
+
+func ({{VariableName}} *{{StructName}}) Save() (rowsAffected int64) {
+    result := database.DB.Save(&{{VariableName}})
+    return result.RowsAffected
+}
+
+func ({{VariableName}} *{{StructName}}) Delete() (rowsAffected int64) {
+    result := database.DB.Delete(&{{VariableName}})
+    return result.RowsAffected
+}

+ 11 - 0
app/cmd/make/tpls/model/model_hooks.tpl

@@ -0,0 +1,11 @@
+package {{PackageName}}
+
+// func ({{VariableName}} *{{StructName}}) BeforeSave(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) BeforeCreate(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) AfterCreate(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) BeforeUpdate(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) AfterUpdate(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) AfterSave(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) BeforeDelete(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) AfterDelete(tx *gorm.DB) (err error) {}
+// func ({{VariableName}} *{{StructName}}) AfterFind(tx *gorm.DB) (err error) {}

+ 26 - 0
app/cmd/make/tpls/model/model_util.tpl

@@ -0,0 +1,26 @@
+package {{PackageName}}
+
+import (
+	"github.com/runningwater/gohub/pkg/database"
+)
+
+func Get(idstr string) ({{VariableName}} {{StructName}}) {
+    database.DB.Where("id", idstr).First(&{{VariableName}})
+    return
+}
+
+func GetBy(field, value string) ({{VariableName}} {{StructName}}) {
+    database.DB.Where("? = ?", field, value).First(&{{VariableName}})
+    return
+}
+
+func All() ({{VariableNamePlural}} []{{StructName}}) {
+    database.DB.Find(&{{VariableNamePlural}})
+    return 
+}
+
+func IsExist(field, value string) bool {
+    var count int64
+    database.DB.Model({{StructName}}{}).Where("? = ?", field, value).Count(&count)
+    return count > 0
+}