Skip to content

Commit 095678d

Browse files
Add SeederEntry interface to dbo
1 parent 01d39d9 commit 095678d

2 files changed

Lines changed: 51 additions & 7 deletions

File tree

dbo/instance.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func (s *dbInstance) AddSeeders(handlers ...SeederHandler) {
5252
s.seeders.Add(handlers...)
5353
}
5454

55+
func (s *dbInstance) AddSeederEntries(entries ...SeederEntry) {
56+
s.seeders.AddEntries(entries...)
57+
}
58+
5559
func (s *dbInstance) Migrate(seed ...bool) (err error) {
5660
if err = s.migrations.Run(s.db); err != nil {
5761
return

dbo/seeder.go

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,43 @@
11
package dbo
22

3-
import "gorm.io/gorm"
3+
import (
4+
"strings"
5+
6+
"github.com/Cyberpull/gokit/fmt"
7+
"gorm.io/gorm"
8+
)
49

510
type SeederHandler func(db *gorm.DB) (err error)
611

12+
type SeederEntry interface {
13+
Name() string
14+
Handler(db *gorm.DB) (err error)
15+
}
16+
717
type dbSeeder struct {
818
opts *Options
19+
entries []SeederEntry
920
handlers []SeederHandler
1021
}
1122

12-
func (s *dbSeeder) Add(handlers ...SeederHandler) {
13-
s.handlers = append(s.handlers, handlers...)
23+
func (x *dbSeeder) Add(handlers ...SeederHandler) {
24+
x.handlers = append(x.handlers, handlers...)
25+
}
26+
27+
func (x *dbSeeder) AddEntries(entries ...SeederEntry) {
28+
x.entries = append(x.entries, entries...)
1429
}
1530

16-
func (s *dbSeeder) Run(db *gorm.DB) (err error) {
17-
for _, handler := range s.handlers {
31+
func (x *dbSeeder) Run(db *gorm.DB) (err error) {
32+
for _, entry := range x.entries {
33+
tx := NewSession(db)
34+
35+
if err = x.RunEntry(tx, entry); err != nil {
36+
return
37+
}
38+
}
39+
40+
for _, handler := range x.handlers {
1841
tx := NewSession(db)
1942

2043
if err = handler(tx); err != nil {
@@ -25,6 +48,22 @@ func (s *dbSeeder) Run(db *gorm.DB) (err error) {
2548
return
2649
}
2750

51+
func (x *dbSeeder) RunEntry(db *gorm.DB, entry SeederEntry) (err error) {
52+
name := strings.TrimSpace(entry.Name())
53+
54+
fmt.Magenta.Printf("Seeding '%v'... ", name)
55+
56+
err = entry.Handler(db)
57+
58+
if err != nil {
59+
return
60+
}
61+
62+
fmt.Magenta.Println(" Completed!")
63+
64+
return
65+
}
66+
2867
// ===================
2968

3069
var Seeder dbSeeder
@@ -35,8 +74,9 @@ func newSeeder(opts *Options) *dbSeeder {
3574
return s
3675
}
3776

38-
func initSeeders(s *dbSeeder) {
39-
s.handlers = make([]SeederHandler, 0)
77+
func initSeeders(x *dbSeeder) {
78+
x.entries = []SeederEntry{}
79+
x.handlers = []SeederHandler{}
4080
}
4181

4282
func init() {

0 commit comments

Comments
 (0)