|
|
@@ -0,0 +1,43 @@
|
|
|
+// Package: migrate 操作对象
|
|
|
+// 负责创建 migrations 数据表,以及执行迁移操作。
|
|
|
+package migrate
|
|
|
+
|
|
|
+import (
|
|
|
+ "github.com/runningwater/gohub/pkg/database"
|
|
|
+ "gorm.io/gorm"
|
|
|
+)
|
|
|
+
|
|
|
+// Migrator 结构体用于存储迁移器的相关信息。
|
|
|
+type Migrator struct {
|
|
|
+ Folder string // Folder 是存储迁移文件的目录名。
|
|
|
+ DB *gorm.DB // Db 是数据库连接对象。
|
|
|
+ Migrator gorm.Migrator // Migrator 是 GORM 的迁移器对象。
|
|
|
+}
|
|
|
+
|
|
|
+func (m *Migrator) createMigrationsTable() {
|
|
|
+ migration := Migration{}
|
|
|
+
|
|
|
+ if !m.Migrator.HasTable(&migration) {
|
|
|
+ // 如果表不存在,则创建表
|
|
|
+ m.Migrator.CreateTable(&migration)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// Migration 对应数据表 migrations 里的一条记录
|
|
|
+type Migration struct {
|
|
|
+ ID uint64 `gorm:"primaryKey;autoIncrement;"`
|
|
|
+ Migration string `gorm:"type:varchar(255);not null;unique;"`
|
|
|
+ Batch int
|
|
|
+}
|
|
|
+
|
|
|
+func NewMigrator() *Migrator {
|
|
|
+ migrator := &Migrator{
|
|
|
+ Folder: "database/migrations",
|
|
|
+ DB: database.DB,
|
|
|
+ Migrator: database.DB.Migrator(),
|
|
|
+ }
|
|
|
+
|
|
|
+ migrator.createMigrationsTable()
|
|
|
+
|
|
|
+ return migrator
|
|
|
+}
|