migration_file.go 1.6 KB

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