package db import ( "time" gormigrate "github.com/go-gormigrate/gormigrate/v2" "github.com/google/uuid" "gorm.io/gorm" ) // Gormigrate returns a Gormigrate migrator for the database. func Gormigrate(db *gorm.DB) *gormigrate.Gormigrate { return gormigrate.New(db, gormigrate.DefaultOptions, []*gormigrate.Migration{ { ID: "202010251337", Migrate: func(tx *gorm.DB) error { type FileUpload struct { ID uint `gorm:"primaryKey"` State FileUploadState `gorm:"index"` PubID uuid.UUID `gorm:"uniqueIndex"` FileName string ContentType string Checksum uint32 CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt } type Paste struct { ID uint `gorm:"primaryKey"` Type PasteType `gorm:"index"` State PasteState `gorm:"index"` Content []byte Key string `gorm:"uniqueIndex"` DeleteToken string CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt } return tx.AutoMigrate(&FileUpload{}, &Paste{}) }, Rollback: func(tx *gorm.DB) error { return tx.Migrator().DropTable(&FileUpload{}, &Paste{}) }, }, { ID: "202304301337", Migrate: func(tx *gorm.DB) error { type User struct { ID uint `gorm:"primaryKey"` User string `gorm:"uniqueIndex"` Password string Admin bool CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt } type FileUpload struct { ID uint `gorm:"primaryKey"` State FileUploadState `gorm:"index"` PubID uuid.UUID `gorm:"uniqueIndex"` CreatedBy uint `gorm:"index"` FileName string ContentType string Checksum uint32 CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt } type Paste struct { ID uint `gorm:"primaryKey"` Type PasteType `gorm:"index"` State PasteState `gorm:"index"` CreatedBy uint `gorm:"index"` Content []byte Key string `gorm:"uniqueIndex"` DeleteToken string CreatedAt time.Time UpdatedAt time.Time DeletedAt gorm.DeletedAt } return tx.AutoMigrate(&User{}, &FileUpload{}, &Paste{}) }, Rollback: func(tx *gorm.DB) error { if err := tx.Migrator().DropTable(&User{}); err != nil { return err } if err := tx.Migrator().DropColumn(&FileUpload{}, "CreatedBy"); err != nil { return err } if err := tx.Migrator().DropColumn(&Paste{}, "CreatedBy"); err != nil { return err } return nil }, }, }) }