|
|
@@ -1,10 +1,15 @@
|
|
|
// Package seed 存放数据库填充数据
|
|
|
package seed
|
|
|
|
|
|
-import "gorm.io/gorm"
|
|
|
+import (
|
|
|
+ "gorm.io/gorm"
|
|
|
+
|
|
|
+ "github.com/runningwater/gohub/pkg/console"
|
|
|
+ "github.com/runningwater/gohub/pkg/database"
|
|
|
+)
|
|
|
|
|
|
// 存放所有 Seeder
|
|
|
-var seedrs []Seeder
|
|
|
+var seeders []Seeder
|
|
|
|
|
|
// 按排序执行的 Seeder 数组
|
|
|
var orderedSeederNames []string
|
|
|
@@ -17,9 +22,9 @@ type Seeder struct {
|
|
|
Func SeederFunc
|
|
|
}
|
|
|
|
|
|
-// AddSeeder 添加一个 Seeder
|
|
|
+// Add AddSeeder 添加一个 Seeder
|
|
|
func Add(name string, fn SeederFunc) {
|
|
|
- seedrs = append(seedrs, Seeder{
|
|
|
+ seeders = append(seeders, Seeder{
|
|
|
Name: name,
|
|
|
Func: fn,
|
|
|
})
|
|
|
@@ -29,3 +34,47 @@ func Add(name string, fn SeederFunc) {
|
|
|
func SetRunOrder(names []string) {
|
|
|
orderedSeederNames = names
|
|
|
}
|
|
|
+
|
|
|
+// GetSeeder 获取 Seeder
|
|
|
+func GetSeeder(name string) Seeder {
|
|
|
+ for _, seeder := range seeders {
|
|
|
+ if seeder.Name == name {
|
|
|
+ return seeder
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Seeder{}
|
|
|
+}
|
|
|
+
|
|
|
+// RunAll 执行所有 Seeder
|
|
|
+func RunAll() {
|
|
|
+ // 先运行 ordered 的
|
|
|
+ executed := make(map[string]string)
|
|
|
+ for _, name := range orderedSeederNames {
|
|
|
+ seeder := GetSeeder(name)
|
|
|
+ if len(seeder.Name) > 0 {
|
|
|
+ if seeder.Func != nil {
|
|
|
+ seeder.Func(database.DB)
|
|
|
+ executed[name] = name
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 再运行剩下的
|
|
|
+ for _, seeder := range seeders {
|
|
|
+ if _, ok := executed[seeder.Name]; !ok {
|
|
|
+ if seeder.Func != nil {
|
|
|
+ console.Warning("Running Seeder: " + seeder.Name)
|
|
|
+ seeder.Func(database.DB)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// RunSeeder 运行指定的 Seeder
|
|
|
+func RunSeeder(name string) {
|
|
|
+ seeder := GetSeeder(name)
|
|
|
+ if seeder.Func != nil {
|
|
|
+ console.Warning("Running Seeder: " + seeder.Name)
|
|
|
+ seeder.Func(database.DB)
|
|
|
+ }
|
|
|
+}
|