migration_file.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package migrate
  2. import (
  3. "gorm.io/gorm"
  4. )
  5. // migrationFunc 定义一个函数类型,用于执行数据库迁移操作。
  6. type migrationFunc func(gorm.Migrator, *gorm.DB)
  7. // migrationFiles 是一个切片,用于存储所有的迁移文件。
  8. var migrationFiles []MigrationFile
  9. // MigrationFile 定义一个结构体,用于存储迁移文件的信息。
  10. // 其中,Up 字段是一个函数类型,用于执行迁移操作;Down 字段是一个函数类型,用于回滚迁移操作;FileName 字段是迁移文件的名称。
  11. type MigrationFile struct {
  12. Up migrationFunc // Up 方法用于执行迁移操作
  13. Down migrationFunc // Down 方法用于回滚迁移操作
  14. FileName string // FileName 用于存储迁移文件的名称
  15. }
  16. // Add 新增一个迁移文件,所有的迁移文件都需要通过这个函数来注册。
  17. // up 和 down 分别是执行迁移和回滚操作的函数,fileName 是迁移文件的名称。
  18. func Add(up, down migrationFunc, fileName string) {
  19. migrationFiles = append(migrationFiles, MigrationFile{
  20. Up: up,
  21. Down: down,
  22. FileName: fileName,
  23. })
  24. }
  25. // getMigrationFile 用于根据迁移文件的名称获取对应的 MigrationFile 结构体。
  26. func getMigrationFile(name string) MigrationFile {
  27. for _, file := range migrationFiles {
  28. if file.FileName == name {
  29. return file
  30. }
  31. }
  32. return MigrationFile{}
  33. }
  34. func (file *MigrationFile) isNotMigrated(migrations []Migration) bool {
  35. for _, migration := range migrations {
  36. if migration.Migration == file.FileName {
  37. return false
  38. }
  39. }
  40. return true
  41. }