From c45a3ace866def2c3c7911d226928c7231d1f2fb Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Mon, 17 Feb 2025 12:18:08 -0400 Subject: [PATCH] feat: replace migrations with a single one --- store/migrations.go | 156 +++++--------------------------------------- 1 file changed, 15 insertions(+), 141 deletions(-) diff --git a/store/migrations.go b/store/migrations.go index 55cc8e4..4586c70 100644 --- a/store/migrations.go +++ b/store/migrations.go @@ -20,88 +20,26 @@ package store import ( "errors" - "time" - "github.com/go-gormigrate/gormigrate/v2" "gorm.io/gorm" + "time" ) var ( dbMigrations = []*gormigrate.Migration{ { - ID: "201903131716", - Migrate: func(tx *gorm.DB) error { return nil }, - Rollback: func(tx *gorm.DB) error { return nil }, - }, - { - ID: "201905291602", + ID: "202502171717", Migrate: func(tx *gorm.DB) error { - type Import struct { - State ImportState `json:"state"` - Error string `json:"error,omitempty"` - } - - type FileSource struct { - URI string `json:"uri" gorm:"size:1024"` - Hash string `json:"hash"` - Import Import `json:"import" gorm:"embedded;embeddedPrefix:import__"` - } - - type FileMetadata struct { - Artist string `json:"artist,omitempty" gorm:"index"` - Title string `json:"title,omitempty" gorm:"index"` - Album string `json:"album,omitempty" gorm:"index"` - } - - type File struct { - ID uint64 `json:"id" gorm:"primaryKey"` - CreatedAt time.Time `json:"created"` - UpdatedAt time.Time `json:"updated"` - ShowName string `json:"show" gorm:"not null;index"` - Show Show `json:"-" gorm:"associationForeignKey:Name"` - Source FileSource `json:"source" gorm:"embedded;embeddedPrefix:source__"` - Metadata FileMetadata `json:"metadata" gorm:"embedded;embeddedPrefix:metadata__"` - Size uint64 `json:"size"` - Duration time.Duration `json:"duration"` - } - - return tx.AutoMigrate(&File{}) - }, - Rollback: func(tx *gorm.DB) error { - return tx.Migrator().DropColumn(&File{}, "source__import__error") - }, - }, - { - ID: "201906010144", - Migrate: func(tx *gorm.DB) error { - type ImportLog struct { - ID uint64 `gorm:"primaryKey"` - File File `gorm:"associationAutoUpdate:false;associationAutoCreate:false"` - FileID uint64 `gorm:"not null;index;uniqueIndex:unique_import_log_step"` - ImportStep string `gorm:"not null;index;uniqueIndex:unique_import_log_step"` - Encoded []byte - } - - return tx.AutoMigrate(&ImportLog{}) - }, - Rollback: func(tx *gorm.DB) error { - return tx.Migrator().DropConstraint(&ImportLog{}, "file_id") - }, - }, - { - ID: "201908150104", - Migrate: func(tx *gorm.DB) error { - type Import struct { - State ImportState `json:"state"` - Error string `json:"error,omitempty"` + type Show struct { + ID uint64 `json:"id" gorm:"primaryKey"` + CreatedAt time.Time `json:"created"` + UpdatedAt time.Time `json:"updated"` } - type FileSource struct { URI string `json:"uri" gorm:"size:1024"` Hash string `json:"hash"` Import Import `json:"import" gorm:"embedded;embeddedPrefix:import__"` } - type FileMetadata struct { Artist string `json:"artist,omitempty" gorm:"index"` Title string `json:"title,omitempty" gorm:"index"` @@ -109,93 +47,29 @@ var ( Organization string `json:"organization,omitempty" gorm:"index"` ISRC string `json:"isrc,omitempty" gorm:"index"` } - - type File struct { - ID uint64 `json:"id" gorm:"primaryKey"` - CreatedAt time.Time `json:"created"` - UpdatedAt time.Time `json:"updated"` - ShowName string `json:"show" gorm:"not null;index"` - Show Show `json:"-" gorm:"associationForeignKey:Name"` - Source FileSource `json:"source" gorm:"embedded;embeddedPrefix:source__"` - Metadata FileMetadata `json:"metadata" gorm:"embedded;embeddedPrefix:metadata__"` - Size uint64 `json:"size"` - Duration time.Duration `json:"duration"` - } - - return tx.AutoMigrate(&File{}) - }, - Rollback: func(tx *gorm.DB) error { - if err := tx.Migrator().DropColumn(&File{}, "metadata__organization"); err != nil { - return err - } - return tx.Migrator().DropColumn(&File{}, "metadata__isrc") - }, - }, - { - ID: "202309141500", - Migrate: func(tx *gorm.DB) error { - type File struct { - ID uint64 `json:"id" gorm:"primaryKey"` - CreatedAt time.Time `json:"created"` - UpdatedAt time.Time `json:"updated"` - ShowName string `json:"show" gorm:"not null;index"` - Show Show `json:"-" gorm:"associationForeignKey:Name"` - Source FileSource `json:"source" gorm:"embedded;embeddedPrefix:source__"` - Metadata FileMetadata `json:"metadata" gorm:"embedded;embeddedPrefix:metadata__"` - Size uint64 `json:"size"` - Duration float64 `json:"duration"` - } - - return tx.Migrator().AlterColumn(&File{}, "duration") - }, - Rollback: func(tx *gorm.DB) error { - type File struct { - ID uint64 `json:"id" gorm:"primaryKey"` - CreatedAt time.Time `json:"created"` - UpdatedAt time.Time `json:"updated"` - ShowName string `json:"show" gorm:"not null;index"` - Show Show `json:"-" gorm:"associationForeignKey:Name"` - Source FileSource `json:"source" gorm:"embedded;embeddedPrefix:source__"` - Metadata FileMetadata `json:"metadata" gorm:"embedded;embeddedPrefix:metadata__"` - Size uint64 `json:"size"` - Duration time.Duration `json:"duration"` - } - - return tx.Migrator().AlterColumn(&File{}, "duration") - }, - }, - { - ID: "202312011500", - Migrate: func(tx *gorm.DB) error { - type Show struct { - ID uint64 `json:"id" gorm:"primaryKey"` - CreatedAt time.Time `json:"created"` - UpdatedAt time.Time `json:"updated"` - } type File struct { ID uint64 `json:"id" gorm:"primaryKey"` CreatedAt time.Time `json:"created"` UpdatedAt time.Time `json:"updated"` ShowID uint64 `json:"showId" gorm:"not null;index"` - Show Show `json:"-" gorm:"associationForeignKey:ID"` + Show Show `json:"-" gorm:"associationForeignKey:ID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` Source FileSource `json:"source" gorm:"embedded;embeddedPrefix:source__"` Metadata FileMetadata `json:"metadata" gorm:"embedded;embeddedPrefix:metadata__"` Size uint64 `json:"size"` Duration float64 `json:"duration"` } - - if err := tx.Migrator().DropConstraint(&File{}, "show_name"); err != nil { - return err + type ImportLog struct { + ID uint64 `gorm:"primaryKey"` + File File `gorm:"associationAutoUpdate:false;associationAutoCreate:false;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"` + FileID uint64 `gorm:"not null;index;uniqueIndex:unique_import_log_step"` + ImportStep string `gorm:"not null;index;uniqueIndex:unique_import_log_step"` + Encoded []byte `gorm:"size:-1"` } - return tx.AutoMigrate(&Show{}, &File{}) + return tx.Migrator().CreateTable(&Show{}, &File{}, &ImportLog{}) }, - Rollback: func(tx *gorm.DB) error { - if err := tx.Migrator().DropColumn(&Show{}, "id"); err != nil { - return err - } - return tx.Migrator().DropColumn(&File{}, "show_id") + return tx.Migrator().DropTable("shows", "files", "import_logs") }, }, } -- GitLab