|
|
|
|
@ -1,7 +1,10 @@
|
|
|
|
|
package db
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
|
"github.com/synctv-org/synctv/internal/conf"
|
|
|
|
|
"github.com/synctv-org/synctv/internal/model"
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
)
|
|
|
|
|
@ -11,16 +14,35 @@ type dbVersion struct {
|
|
|
|
|
Upgrade func(*gorm.DB) error
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const CurrentVersion = "0.0.1"
|
|
|
|
|
const CurrentVersion = "0.0.2"
|
|
|
|
|
|
|
|
|
|
var models = []any{
|
|
|
|
|
new(model.Setting),
|
|
|
|
|
new(model.User),
|
|
|
|
|
new(model.UserProvider),
|
|
|
|
|
new(model.Room),
|
|
|
|
|
new(model.RoomUserRelation),
|
|
|
|
|
new(model.Movie),
|
|
|
|
|
new(model.BilibiliVendor),
|
|
|
|
|
new(model.AlistVendor),
|
|
|
|
|
new(model.EmbyVendor),
|
|
|
|
|
new(model.VendorBackend),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var dbVersions = map[string]dbVersion{
|
|
|
|
|
"0.0.1": {
|
|
|
|
|
NextVersion: "0.0.2-dev",
|
|
|
|
|
NextVersion: "0.0.2",
|
|
|
|
|
Upgrade: func(db *gorm.DB) error {
|
|
|
|
|
return db.Migrator().DropTable("streaming_vendor_infos")
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
"0.0.2": {
|
|
|
|
|
NextVersion: "",
|
|
|
|
|
Upgrade: nil,
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func upgradeDatabase() error {
|
|
|
|
|
func UpgradeDatabase() error {
|
|
|
|
|
setting := model.Setting{
|
|
|
|
|
Name: "database_version",
|
|
|
|
|
Type: model.SettingTypeString,
|
|
|
|
|
@ -32,6 +54,12 @@ func upgradeDatabase() error {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
currentVersion := setting.Value
|
|
|
|
|
if currentVersion != CurrentVersion {
|
|
|
|
|
err = autoMigrate(models...)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
version, ok := dbVersions[currentVersion]
|
|
|
|
|
if !ok {
|
|
|
|
|
return nil
|
|
|
|
|
@ -57,3 +85,21 @@ func upgradeDatabase() error {
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func autoMigrate(dst ...any) error {
|
|
|
|
|
log.Info("migrating database...")
|
|
|
|
|
switch conf.Conf.Database.Type {
|
|
|
|
|
case conf.DatabaseTypeMysql:
|
|
|
|
|
if err := db.Exec("SET FOREIGN_KEY_CHECKS = 0").Error; err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if err := db.Set("gorm:table_options", "ENGINE=InnoDB CHARSET=utf8mb4").AutoMigrate(dst...); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return db.Exec("SET FOREIGN_KEY_CHECKS = 1").Error
|
|
|
|
|
case conf.DatabaseTypeSqlite3, conf.DatabaseTypePostgres:
|
|
|
|
|
return db.AutoMigrate(dst...)
|
|
|
|
|
default:
|
|
|
|
|
return fmt.Errorf("unknown database type: %s", conf.Conf.Database.Type)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|