Parcourir la source

feat(command): make seed 命令

runningwater il y a 6 mois
Parent
commit
47cba0c3c2
5 fichiers modifiés avec 59 ajouts et 0 suppressions
  1. 4 0
      README.md
  2. 1 0
      app/cmd/make/make.go
  3. 24 0
      app/cmd/make/make_seeder.go
  4. 30 0
      app/cmd/make/tpls/seeder.tpl
  5. 0 0
      database/seeders/init.go

+ 4 - 0
README.md

@@ -73,6 +73,10 @@ UNIQUE KEY `migration` (`migration`)
 
 #### 🚀 新功能
 
+- *(command)* Make seed 命令
+- *(command)* Make factory 命令
+- Facotry 和 Faker
+- 当前用户接口
 - 通过手机找回密码
 - *(command)* Migrate fresh
 - *(command)* Migrate reset and migrate refresh

+ 1 - 0
app/cmd/make/make.go

@@ -73,6 +73,7 @@ func init() {
 		CmdMakeRequest,
 		CmdMakeMigration,
 		CmdMakeFactory,
+		CmdMakeSeeder,
 	)
 }
 

+ 24 - 0
app/cmd/make/make_seeder.go

@@ -0,0 +1,24 @@
+package make
+
+import (
+	"github.com/runningwater/gohub/pkg/console"
+	"github.com/spf13/cobra"
+)
+
+var CmdMakeSeeder = &cobra.Command{
+	Use:   "seeder",
+	Short: "Create model's seeder file, example: make seeder user",
+	Run:   runMakeSeeder,
+	Args:  cobra.ExactArgs(1),
+}
+
+func runMakeSeeder(cmd *cobra.Command, args []string) {
+	model := makeModelFromString(args[0])
+
+	filePath := "database/seeders/" + model.PackageName + "_seeder.go"
+
+	createFileFromTpl(filePath, "seeder", model)
+	console.Success("Seeder file created successfully: " + filePath)
+	// 提示用户需要在 database/seeders/init.go 中注册 Seeder
+	console.Warning("Please register the seeder in database/seeders/init.go")
+}

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

@@ -0,0 +1,30 @@
+package seeders
+
+import (
+	"fmt"
+
+	"github.com/runningwater/gohub/database/factories"
+	"github.com/runningwater/gohub/pkg/console"
+	"github.com/runningwater/gohub/pkg/logger"
+	"github.com/runningwater/gohub/pkg/seed"
+	"gorm.io/gorm"
+)
+
+func init() {
+	// 添加 Seeder
+	seed.Add("{{StructNamePlural}}TableSeeder", func(db *gorm.DB) {
+        // 创建 10 个用户对象
+        {{VariableNamePlural}} := factories.Make{{StructNamePlural}}(10)
+
+        // 批量插入到数据库
+        result := db.Table("{{TableName}}").Create(&{{VariableNamePlural}})
+
+        if err := result.Error; err != nil {
+            logger.LogIf(err)
+            return
+        }
+
+        // 打印成功信息
+        console.Success(fmt.Sprintf("Table [%v] %v rows seeded", result.Statement.Table, result.RowsAffected))
+	})
+}

database/seeders/seeder.go → database/seeders/init.go