init
This commit is contained in:
@@ -0,0 +1,456 @@
|
||||
package patch
|
||||
|
||||
import (
|
||||
"github.com/perfect-panel/ppanel-server/initialize/migrate"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/application"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/auth"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/log"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/server"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/system"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/user"
|
||||
"github.com/perfect-panel/ppanel-server/pkg/email"
|
||||
"github.com/perfect-panel/ppanel-server/pkg/logger"
|
||||
"github.com/perfect-panel/ppanel-server/pkg/sms"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func Migrate01200(db *gorm.DB) error {
|
||||
var version = "0.1.2(01200)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if exists := db.Migrator().HasColumn(&user.OldUser{}, "email"); !exists {
|
||||
logger.Debug("Migrate 01200 skipped", logger.Field("reason", "old user table not exists"))
|
||||
return nil
|
||||
}
|
||||
|
||||
logger.Debug("Migrate 01200 started", logger.Field("step", "1"), logger.Field("action", "migrate old user to user auth methods"))
|
||||
var users []*user.OldUser
|
||||
if err := tx.Model(&user.OldUser{}).Find(&users).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if err := tx.Migrator().AutoMigrate(&user.AuthMethods{}); err != nil {
|
||||
logger.Errorw("Migrate 01200 failed", logger.Field("step", "1"), logger.Field("action", "create user auth methods table"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
err := tx.Transaction(func(tx *gorm.DB) error {
|
||||
for _, oldUser := range users {
|
||||
if oldUser.Email == "" {
|
||||
continue
|
||||
}
|
||||
// create user auth method
|
||||
authMethod := &user.AuthMethods{
|
||||
UserId: oldUser.Id,
|
||||
AuthType: "email",
|
||||
AuthIdentifier: oldUser.Email,
|
||||
Verified: false,
|
||||
}
|
||||
if err := tx.Create(authMethod).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
logger.Errorw("Migrate 01200 failed", logger.Field("step", "1"), logger.Field("action", "migrate old user to user auth methods"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Debug("Migrate 01200 completed", logger.Field("step", "1"), logger.Field("action", "migrate old user to user auth methods"))
|
||||
|
||||
logger.Debug("Migrate 01200 started", logger.Field("step", "2"), logger.Field("action", "exclude sql files"))
|
||||
// exclude sql files
|
||||
if err := migrate.ExecuteSQLFile(tx, "database/01200-patch.sql"); err != nil {
|
||||
logger.Errorw("Migrate 01200 failed", logger.Field("step", "2"), logger.Field("action", "exclude sql files"), logger.Field("file", "database/01200-patch.sql"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Debug("Migrate 01200 completed", logger.Field("step", "2"), logger.Field("action", "exclude sql files"))
|
||||
|
||||
logger.Debug("Migrate 01200 started", logger.Field("step", "3"), logger.Field("action", "update system config"))
|
||||
versionConfig := &system.System{
|
||||
Category: "system",
|
||||
Key: "Version",
|
||||
Value: version,
|
||||
Type: "string",
|
||||
Desc: "Version of the system, eg: 1.0.0(10000)",
|
||||
}
|
||||
// update system config
|
||||
if err := tx.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Save(&versionConfig).Error; err != nil {
|
||||
logger.Errorw("Migrate 01200 failed", logger.Field("step", "3"), logger.Field("action", "update system config"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate01201(db *gorm.DB) error {
|
||||
version := "0.1.2(01201)"
|
||||
// exclude sql files
|
||||
if err := migrate.ExecuteSQLFile(db, "database/01201-patch.sql"); err != nil {
|
||||
logger.Errorw("Migrate 01201 failed", logger.Field("step", "1"), logger.Field("action", "exclude sql files"), logger.Field("file", "database/01200-patch.sql"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// update system config
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate 01201 failed", logger.Field("step", "2"), logger.Field("action", "update system config"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Migrate01202(db *gorm.DB) error {
|
||||
version := "0.1.2(01202)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
// migrate email config to system config
|
||||
if err := db.Migrator().AutoMigrate(&auth.Auth{}); err != nil {
|
||||
logger.Errorw("Migrate01202: AutoMigrate Auth failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
if db.Migrator().HasColumn("oauth_config", "platform") {
|
||||
if err := db.Migrator().RenameColumn("oauth_config", "platform", "method"); err != nil {
|
||||
logger.Errorw("Migrate01202: RenameColumn platform to method failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
}
|
||||
}
|
||||
|
||||
// init email config
|
||||
if err := initEmailConfig(db); err != nil {
|
||||
logger.Errorw("Migrate01202: initEmailConfig failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// init mobile config
|
||||
if err := initMobileConfig(db); err != nil {
|
||||
logger.Errorw("Migrate01202: initMobileConfig failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// drop oauth_config table
|
||||
err := db.Migrator().DropTable("oauth_config")
|
||||
if err != nil {
|
||||
logger.Debug("Migrate01202: DropTable oauth_config failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
}
|
||||
// exclude sql files
|
||||
if err := migrate.ExecuteSQLFile(db, "database/01202-patch.sql"); err != nil {
|
||||
logger.Errorw("Migrate 01202 failed", logger.Field("action", "exclude sql files"), logger.Field("file", "database/012002-patch.sql"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
// update system config
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate 01202 failed", logger.Field("step", "2"), logger.Field("action", "update system config"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
func Migrate01203(db *gorm.DB) error {
|
||||
version := "0.1.2(01203)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := db.AutoMigrate(&user.LoginLog{}, &user.SubscribeLog{}); err != nil {
|
||||
logger.Errorw("Migrate01203: AutoMigrate LoginLog/SubscribeLog failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// update version
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate01203: Update Version failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate01204(db *gorm.DB) error {
|
||||
version := "0.1.2(01204)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := db.AutoMigrate(&log.MessageLog{}); err != nil {
|
||||
logger.Errorw("Migrate01204: AutoMigrate MessageLog failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// Trial configuration
|
||||
if err := initTrialConfig(tx); err != nil {
|
||||
logger.Errorw("Migrate01204: initTrialConfig failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// Add auth method with device
|
||||
if err := addAuthMethodWithDevice(tx); err != nil {
|
||||
logger.Errorw("Migrate01204: Add auth method with device failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// update version
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate01204: Update Version failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate01205(db *gorm.DB) error {
|
||||
version := "0.1.2(01205)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
// Add VerifyCode public configuration
|
||||
configs := []system.System{
|
||||
{
|
||||
Category: "verify_code",
|
||||
Key: "VerifyCodeExpireTime",
|
||||
Value: "5",
|
||||
Type: "int",
|
||||
Desc: "Verify code expire time",
|
||||
},
|
||||
{
|
||||
Category: "verify_code",
|
||||
Key: "VerifyCodeLimit",
|
||||
Value: "15",
|
||||
Type: "int",
|
||||
Desc: "limits of verify code",
|
||||
},
|
||||
{
|
||||
Category: "verify_code",
|
||||
Key: "VerifyCodeInterval",
|
||||
Value: "60",
|
||||
Type: "int",
|
||||
Desc: "Interval of verify code",
|
||||
},
|
||||
}
|
||||
if err := tx.Model(&system.System{}).Save(&configs).Error; err != nil {
|
||||
logger.Errorw("Migrate01205: Save VerifyCode public configuration failed", logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
|
||||
// update version
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate01205: Update Version failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate01301(db *gorm.DB) error {
|
||||
version := "0.1.3(01301)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
err := tx.Migrator().AlterColumn(&application.Application{}, "icon")
|
||||
if err != nil {
|
||||
logger.Errorw("Migrate01301: AlterColumn failed", logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
// update version
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate01205: Update Version failed", logger.Field("version", version), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate01602(db *gorm.DB) error {
|
||||
version := "0.1.6(01602)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if tx.Model(&system.System{}).Where("`category` = 'tos' AND `key` = 'TosContent'").Find(&system.System{}).RowsAffected == 0 {
|
||||
if err := tx.Save(&system.System{
|
||||
Category: "tos",
|
||||
Key: "TosContent",
|
||||
Value: "Welcome to use Perfect Panel",
|
||||
Type: "string",
|
||||
Desc: "Terms of Service",
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
// update version
|
||||
if err := tx.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
func Migrate01701(db *gorm.DB) error {
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
version := "0.1.7(01701)"
|
||||
if err := db.Migrator().AlterColumn(&user.User{}, "Avatar"); err != nil {
|
||||
return err
|
||||
}
|
||||
// update version
|
||||
if err := tx.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
func Migrate01702(db *gorm.DB) error {
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
version := "0.1.7(01702)"
|
||||
|
||||
if tx.Model(&system.System{}).Where("`category` = 'site' AND `key` = 'Keywords'").Find(&system.System{}).RowsAffected == 0 {
|
||||
if err := tx.Save(&system.System{
|
||||
Category: "site",
|
||||
Key: "Keywords",
|
||||
Value: "Perfect Panel,PPanel",
|
||||
Type: "string",
|
||||
Desc: "Keywords",
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if tx.Model(&system.System{}).Where("`category` = 'site' AND `key` = 'CustomHTML'").Find(&system.System{}).RowsAffected == 0 {
|
||||
if err := tx.Save(&system.System{
|
||||
Category: "site",
|
||||
Key: "CustomHTML",
|
||||
Value: "",
|
||||
Type: "string",
|
||||
Desc: "Custom HTML",
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// update version
|
||||
if err := tx.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate01703(db *gorm.DB) error {
|
||||
version := "0.1.7(01703)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if tx.Model(&system.System{}).Where("`category` = 'tos' AND `key` = 'PrivacyPolicy'").Find(&system.System{}).RowsAffected == 0 {
|
||||
if err := tx.Save(&system.System{
|
||||
Category: "tos",
|
||||
Key: "PrivacyPolicy",
|
||||
Value: "",
|
||||
Type: "string",
|
||||
Desc: "Privacy Policy",
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return tx.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error
|
||||
})
|
||||
}
|
||||
func Migrate01704(db *gorm.DB) error {
|
||||
version := "0.1.7(01704)"
|
||||
|
||||
// check server table latitude column exists, if not exists, create it
|
||||
if exists := db.Migrator().HasColumn(&server.Server{}, "latitude"); !exists {
|
||||
if err := db.Migrator().AddColumn(&server.Server{}, "latitude"); err != nil {
|
||||
logger.Errorw("Migrate 01704 failed", logger.Field("action", "add latitude column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Infow("Migrate 01704 success", logger.Field("action", "add latitude column"))
|
||||
}
|
||||
// check server table longitude column exists, if not exists, create it
|
||||
if exists := db.Migrator().HasColumn(&server.Server{}, "longitude"); !exists {
|
||||
if err := db.Migrator().AddColumn(&server.Server{}, "longitude"); err != nil {
|
||||
logger.Errorw("Migrate 01704 failed", logger.Field("action", "add longitude column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Infow("Migrate 01704 success", logger.Field("action", "add longitude column"))
|
||||
}
|
||||
// update system config
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate 01704 failed", logger.Field("step", "2"), logger.Field("action", "update system config"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Infow("Migrate 01704 success", logger.Field("action", "update system config"))
|
||||
return nil
|
||||
}
|
||||
|
||||
func Migrate01705(db *gorm.DB) error {
|
||||
version := "0.1.7(01705)"
|
||||
// check user_device table exists, if not exists, create it
|
||||
if exists := db.Migrator().HasTable(&user.Device{}); !exists {
|
||||
if err := db.Migrator().CreateTable(&user.Device{}); err != nil {
|
||||
logger.Errorw("Migrate 01705 failed", logger.Field("action", "create user_device table"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Infow("Migrate 01705 success", logger.Field("action", "create user_device table"))
|
||||
}
|
||||
// check user_table exists and imei column exists, if exists, update imei column name to identifier
|
||||
if exists := db.Migrator().HasColumn(&user.Device{}, "imei"); exists {
|
||||
if err := db.Migrator().RenameColumn(&user.Device{}, "imei", "identifier"); err != nil {
|
||||
logger.Errorw("Migrate 01705 failed", logger.Field("action", "rename imei column to identifier"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Infow("Migrate 01705 success", logger.Field("action", "rename imei column to identifier"))
|
||||
}
|
||||
|
||||
// update system config
|
||||
if err := db.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error; err != nil {
|
||||
logger.Errorw("Migrate 01705 failed", logger.Field("step", "2"), logger.Field("action", "update system config"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func initMobileConfig(db *gorm.DB) error {
|
||||
cfg := new(auth.AlibabaCloudConfig)
|
||||
mobileConfig := auth.MobileAuthConfig{
|
||||
Platform: sms.AlibabaCloud.String(),
|
||||
PlatformConfig: cfg.Marshal(),
|
||||
EnableWhitelist: false,
|
||||
Whitelist: make([]string, 0),
|
||||
}
|
||||
authMethod := auth.Auth{
|
||||
Method: "mobile",
|
||||
Config: mobileConfig.Marshal(),
|
||||
}
|
||||
if err := db.Save(&authMethod).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func initEmailConfig(db *gorm.DB) error {
|
||||
enable := true
|
||||
smtpConfig := new(auth.SMTPConfig)
|
||||
|
||||
emailConfig := auth.EmailAuthConfig{
|
||||
Platform: "smtp",
|
||||
PlatformConfig: smtpConfig.Marshal(),
|
||||
EnableVerify: false,
|
||||
EnableDomainSuffix: false,
|
||||
DomainSuffixList: "",
|
||||
VerifyEmailTemplate: email.DefaultEmailVerifyTemplate,
|
||||
ExpirationEmailTemplate: email.DefaultExpirationEmailTemplate,
|
||||
MaintenanceEmailTemplate: email.DefaultMaintenanceEmailTemplate,
|
||||
}
|
||||
authMethod := auth.Auth{
|
||||
Method: "email",
|
||||
Config: emailConfig.Marshal(),
|
||||
Enabled: &enable,
|
||||
}
|
||||
return db.Save(&authMethod).Error
|
||||
}
|
||||
|
||||
func initTrialConfig(tx *gorm.DB) error {
|
||||
configs := []system.System{
|
||||
{
|
||||
Category: "register",
|
||||
Key: "TrialSubscribe",
|
||||
Value: "",
|
||||
Type: "int",
|
||||
Desc: "Trial subscription",
|
||||
},
|
||||
{
|
||||
Category: "register",
|
||||
Key: "TrialTime",
|
||||
Value: "24",
|
||||
Type: "int",
|
||||
Desc: "Trial time",
|
||||
},
|
||||
{
|
||||
Category: "register",
|
||||
Key: "TrialTimeUnit",
|
||||
Value: "Hour",
|
||||
Type: "string",
|
||||
Desc: "Trial time unit",
|
||||
},
|
||||
}
|
||||
return tx.Model(&system.System{}).Save(&configs).Error
|
||||
}
|
||||
|
||||
func addAuthMethodWithDevice(tx *gorm.DB) error {
|
||||
return tx.Model(&auth.Auth{}).Save(&auth.Auth{
|
||||
Method: "device",
|
||||
}).Error
|
||||
}
|
||||
@@ -0,0 +1,252 @@
|
||||
package patch
|
||||
|
||||
import (
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/ads"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/application"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/auth"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/order"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/payment"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/server"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/system"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/user"
|
||||
"github.com/perfect-panel/ppanel-server/pkg/logger"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func Migrate02000(db *gorm.DB) error {
|
||||
version := "0.2.0(02000)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := initDeviceConfig(tx); err != nil {
|
||||
logMigrationError("Setting Device Config", err)
|
||||
return err
|
||||
}
|
||||
logMigrationSuccess("Setting Device Config")
|
||||
|
||||
if !tx.Migrator().HasTable(&ads.Ads{}) {
|
||||
if err := createAdsTable(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if err := updatePaymentTable(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := tx.Migrator().AutoMigrate(&order.Order{}); err != nil {
|
||||
logMigrationError("Auto Migrate Order", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02001(db *gorm.DB) error {
|
||||
version := "0.2.0(02001)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if tx.Model(&system.System{}).Where("`category` = 'site' AND `key` = 'CustomData'").Find(&system.System{}).RowsAffected == 0 {
|
||||
if err := tx.Save(&system.System{
|
||||
Category: "site",
|
||||
Key: "CustomData",
|
||||
Value: "{\"website\":\"\",\"contacts\":{\"email\":\"\",\"telephone\":\"\",\"address\":\"\"},\"community\":{\"telegram\":\"\",\"twitter\":\"\",\"discord\":\"\",\"instagram\":\"\",\"linkedin\":\"\",\"facebook\":\"\",\"github\":\"\"}}",
|
||||
Type: "string",
|
||||
Desc: "Custom data",
|
||||
}).Error; err != nil {
|
||||
logMigrationError("create custom data system config", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02002(db *gorm.DB) error {
|
||||
version := "0.2.0(02002)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := tx.Model(&system.System{}).Where("`category` = 'site' AND `key` = 'CustomData'").UpdateColumn("type", "string").Error; err != nil {
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02003(db *gorm.DB) error {
|
||||
version := "0.2.0(02003)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := addColumnIfNotExists(tx, &order.Order{}, "payment_id"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := addColumnIfNotExists(tx, &payment.Payment{}, "platform"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := dropColumnIfExists(tx, &payment.Payment{}, "mark"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := addColumnIfNotExists(tx, &payment.Payment{}, "description"); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := addColumnIfNotExists(tx, &payment.Payment{}, "token"); err != nil {
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02007(db *gorm.DB) error {
|
||||
version := "0.2.0(02007)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := recreateTable(tx, &server.RuleGroup{}); err != nil {
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02008(db *gorm.DB) error {
|
||||
version := "0.2.0(02008)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if exists := tx.Migrator().HasColumn(&application.ApplicationConfig{}, "invitation_link"); !exists {
|
||||
if err := tx.Migrator().AddColumn(&application.ApplicationConfig{}, "invitation_link"); err != nil {
|
||||
logger.Errorw("Migrate 02008 failed", logger.Field("action", "add invitation_link column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
logger.Infow("Migrate 02008 success", logger.Field("action", "add invitation_link column"))
|
||||
}
|
||||
|
||||
if exists := tx.Migrator().HasTable(&user.DeviceOnlineRecord{}); !exists {
|
||||
if err := tx.Migrator().CreateTable(&user.DeviceOnlineRecord{}); err != nil {
|
||||
logger.Errorw("Migrate 02008 failed", logger.Field("action", "create device_online_record table"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
}
|
||||
return tx.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02009(db *gorm.DB) error {
|
||||
version := "0.2.0(02009)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := addColumnIfNotExists(tx, &user.Subscribe{}, "finished_at"); err != nil {
|
||||
logger.Errorw("Migrate 02009 failed", logger.Field("action", "subscribe table add finished_at column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02010(db *gorm.DB) error {
|
||||
version := "0.2.0(02010)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := addColumnIfNotExists(tx, &application.ApplicationConfig{}, "kr_website_id"); err != nil {
|
||||
logger.Errorw("Migrate 02010 failed", logger.Field("action", "application_config table add kr_website_id column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate02011(db *gorm.DB) error {
|
||||
version := "0.2.0(02011)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := addColumnIfNotExists(tx, &user.Subscribe{}, "used_period"); err != nil {
|
||||
logger.Errorw("Migrate 02011 failed", logger.Field("action", "user.Subscribe table add used_period column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
if err := addColumnIfNotExists(tx, &user.Subscribe{}, "total_period"); err != nil {
|
||||
logger.Errorw("Migrate 02011 failed", logger.Field("action", "user.Subscribe table add total_period column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func initDeviceConfig(db *gorm.DB) error {
|
||||
cfg := new(auth.DeviceConfig)
|
||||
return db.Model(&auth.Auth{}).Where("method = ?", "device").Update("config", cfg.Marshal()).Error
|
||||
}
|
||||
|
||||
func createAdsTable(tx *gorm.DB) error {
|
||||
if err := tx.Migrator().CreateTable(&ads.Ads{}); err != nil {
|
||||
logMigrationError("Create Table Ads", err)
|
||||
return err
|
||||
}
|
||||
logMigrationSuccess("Create Table Ads")
|
||||
return tx.Model(&system.System{}).Save(&system.System{
|
||||
Category: "ad",
|
||||
Key: "WebAD",
|
||||
Value: "false",
|
||||
Type: "bool",
|
||||
Desc: "Display ad on the web",
|
||||
}).Error
|
||||
}
|
||||
|
||||
func updatePaymentTable(tx *gorm.DB) error {
|
||||
if err := tx.Exec("DROP TABLE IF EXISTS `payment`").Error; err != nil {
|
||||
logMigrationError("Drop Payment Table", err)
|
||||
}
|
||||
if err := tx.AutoMigrate(&payment.Payment{}); err != nil {
|
||||
logMigrationError("Auto Migrate Payment", err)
|
||||
return err
|
||||
}
|
||||
enable := true
|
||||
return tx.Model(&payment.Payment{}).Create(&payment.Payment{
|
||||
Id: -1,
|
||||
Name: "",
|
||||
Platform: "balance",
|
||||
Icon: "",
|
||||
Domain: "",
|
||||
Config: "",
|
||||
FeeMode: 0,
|
||||
FeePercent: 0,
|
||||
FeeAmount: 0,
|
||||
Enable: &enable,
|
||||
}).Error
|
||||
}
|
||||
|
||||
func updateSystemVersion(tx *gorm.DB, version string) error {
|
||||
return tx.Model(&system.System{}).Where("`category` = 'system' AND `key` = 'Version'").Update("value", version).Error
|
||||
}
|
||||
|
||||
func addColumnIfNotExists(tx *gorm.DB, model interface{}, columnName string) error {
|
||||
if exists := tx.Migrator().HasColumn(model, columnName); !exists {
|
||||
if err := tx.Migrator().AddColumn(model, columnName); err != nil {
|
||||
logMigrationError("add "+columnName+" column", err)
|
||||
return err
|
||||
}
|
||||
logMigrationSuccess("add " + columnName + " column")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func dropColumnIfExists(tx *gorm.DB, model interface{}, columnName string) error {
|
||||
if exists := tx.Migrator().HasColumn(model, columnName); exists {
|
||||
if err := tx.Migrator().DropColumn(model, columnName); err != nil {
|
||||
logMigrationError("del "+columnName+" column", err)
|
||||
return err
|
||||
}
|
||||
logMigrationSuccess("del " + columnName + " column")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func recreateTable(tx *gorm.DB, model interface{}) error {
|
||||
if exists := tx.Migrator().HasTable(model); exists {
|
||||
if err := tx.Migrator().DropTable(model); err != nil {
|
||||
logMigrationError("drop table", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
if err := tx.Migrator().CreateTable(model); err != nil {
|
||||
logMigrationError("create table", err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func logMigrationError(action string, err error) {
|
||||
logger.Errorw("Migration failed", logger.Field("action", action), logger.Field("error", err.Error()))
|
||||
}
|
||||
|
||||
func logMigrationSuccess(action string) {
|
||||
logger.Infow("Migration success", logger.Field("action", action))
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package patch
|
||||
|
||||
import (
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/application"
|
||||
"github.com/perfect-panel/ppanel-server/internal/model/user"
|
||||
"github.com/perfect-panel/ppanel-server/pkg/logger"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func Migrate03001(db *gorm.DB) error {
|
||||
version := "0.3.0(1)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := addColumnIfNotExists(tx, &user.Subscribe{}, "finished_at"); err != nil {
|
||||
logger.Errorw("Migrate 03001 failed", logger.Field("action", "user.Subscribe table add finished_at column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
|
||||
func Migrate03002(db *gorm.DB) error {
|
||||
version := "0.3.0(2)"
|
||||
return db.Transaction(func(tx *gorm.DB) error {
|
||||
if err := addColumnIfNotExists(tx, &application.ApplicationConfig{}, "kr_website_id"); err != nil {
|
||||
logger.Errorw("Migrate 03002 failed", logger.Field("action", "application.Config table add kr_website_id column"), logger.Field("error", err.Error()))
|
||||
return err
|
||||
}
|
||||
return updateSystemVersion(tx, version)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user