-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample_test.go
58 lines (51 loc) · 1.33 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package gorm_migration
import (
"github.com/google/uuid"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
func (mm *MigrationManger) createUsersTable() error {
type User struct {
gorm.Model
Status uint8 `gorm:"type:tinyint;comment:enum"`
Email string `gorm:"type:varchar(255)"`
PasswordHash string `gorm:"type:text;comment:BCrypt"`
}
return mm.ChangeTable(&User{})
}
func (mm *MigrationManger) addAvatarToUsers() error {
type User struct {
Avatar string `gorm:"type:text;comment:Avatar URL"`
}
return mm.ChangeColumn(&User{}, "Avatar")
}
func (mm *MigrationManger) addEmailIndexToUsers() error {
up := mm.ChangeFuncWrap("CREATE UNIQUE INDEX idx_users_on_email ON users (email);")
down := mm.ChangeFuncWrap("DROP INDEX idx_users_on_email;")
return mm.Change(up, down)
}
func newMemoryDB() *gorm.DB {
dbname := "file:" + uuid.New().String() + "?mode=memory"
db, err := gorm.Open(sqlite.Open(dbname), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
return db
}
func customerMigrations(mm *MigrationManger) []changeFunc {
return []changeFunc{
mm.createUsersTable,
mm.addAvatarToUsers,
mm.addEmailIndexToUsers,
}
}
func ExampleMigrate() {
db := newMemoryDB()
mm := NewMigrationManger(db, Migrate)
mm.RegisterFunctions(
mm.createUsersTable,
mm.addAvatarToUsers,
mm.addEmailIndexToUsers)
mm.Migrate()
}