| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // Package seed 存放数据库填充数据
- package seed
- import (
- "gorm.io/gorm"
- "github.com/runningwater/gohub/pkg/console"
- "github.com/runningwater/gohub/pkg/database"
- )
- // 存放所有 Seeder
- var seeders []Seeder
- // 按排序执行的 Seeder 数组
- var orderedSeederNames []string
- type SeederFunc func(*gorm.DB)
- // Seeder 对应每一个 database/seeders 目录下的 Seeder 文件
- type Seeder struct {
- Name string
- Func SeederFunc
- }
- // Add AddSeeder 添加一个 Seeder
- func Add(name string, fn SeederFunc) {
- seeders = append(seeders, Seeder{
- Name: name,
- Func: fn,
- })
- }
- // SetRunOrder 设置 按顺序执行的 Seeder 数组
- 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)
- }
- }
|