diff --git a/plugins/jira/models/migrationscripts/20220407_add_source_table.go b/plugins/jira/models/migrationscripts/20220407_add_source_table.go new file mode 100644 index 00000000000..d8c3eb291eb --- /dev/null +++ b/plugins/jira/models/migrationscripts/20220407_add_source_table.go @@ -0,0 +1,28 @@ +package migrationscripts + +import ( + "context" + + "github.com/apache/incubator-devlake/plugins/jira/models/migrationscripts/archived" + "gorm.io/gorm" +) + +type InitSchemas struct{} + +func (*InitSchemas) Up(ctx context.Context, db *gorm.DB) error { + m := db.Migrator() + if m.HasTable(&archived.JiraConnection{}) { + return nil + } + return db.Migrator().AutoMigrate( + &archived.JiraSource{}, + ) +} + +func (*InitSchemas) Version() uint64 { + return 20220407201138 +} + +func (*InitSchemas) Name() string { + return "Jira init schemas" +} diff --git a/plugins/jira/models/migrationscripts/20220505_rename_source_table.go b/plugins/jira/models/migrationscripts/20220505_rename_source_table.go index 2056c7a6408..ef201aa50a7 100644 --- a/plugins/jira/models/migrationscripts/20220505_rename_source_table.go +++ b/plugins/jira/models/migrationscripts/20220505_rename_source_table.go @@ -42,12 +42,9 @@ func (JiraConnectionV010) TableName() string { type renameSourceTable struct{} func (*renameSourceTable) Up(ctx context.Context, db *gorm.DB) error { - m := db.Migrator() - if m.HasTable(&archived.JiraSource{}) && !m.HasTable(&archived.JiraConnection{}) { - err := db.Migrator().RenameTable(archived.JiraSource{}, JiraConnectionV010{}) - if err != nil { - return err - } + err := db.Migrator().RenameTable(archived.JiraSource{}, JiraConnectionV010{}) + if err != nil { + return err } return nil } diff --git a/plugins/jira/models/migrationscripts/20220716_add_init_tables.go b/plugins/jira/models/migrationscripts/20220716_add_init_tables.go index 557d6351e25..defc0f1590f 100644 --- a/plugins/jira/models/migrationscripts/20220716_add_init_tables.go +++ b/plugins/jira/models/migrationscripts/20220716_add_init_tables.go @@ -30,6 +30,15 @@ import ( "gorm.io/gorm" ) +type JiraConnectionTemp struct { + archived.RestConnection `mapstructure:",squash"` + archived.BasicAuth `mapstructure:",squash"` +} + +func (JiraConnectionTemp) TableName() string { + return "_tool_jira_connections_temp" +} + type JiraConnectionV011 struct { ID uint64 `gorm:"primaryKey" json:"id"` CreatedAt time.Time `json:"createdAt"` @@ -84,66 +93,61 @@ func (*addInitTables) Up(ctx context.Context, db *gorm.DB) error { } // get connection history data - var result *gorm.DB - m := db.Migrator() - - if m.HasTable(&JiraConnectionV011{}) { - var jiraConns []JiraConnectionV011 - result = db.Find(&jiraConns) + err = db.Migrator().AutoMigrate(&JiraConnectionTemp{}) + if err != nil { + return err + } + defer db.Migrator().DropTable(&JiraConnectionTemp{}) - if result.Error == nil { - err := db.Migrator().DropTable(&JiraConnectionV011{}) + var result *gorm.DB + var jiraConns []JiraConnectionV011 + result = db.Find(&jiraConns) + + if result.Error == nil { + for _, v := range jiraConns { + conn := &JiraConnectionTemp{} + conn.ID = v.ID + conn.Name = v.Name + conn.Endpoint = v.Endpoint + conn.Proxy = v.Proxy + conn.RateLimitPerHour = v.RateLimit + + c := config.GetConfig() + encKey := c.GetString(core.EncodeKeyEnvStr) + if encKey == "" { + return fmt.Errorf("jira v0.11 invalid encKey") + } + auth, err := core.Decrypt(encKey, v.BasicAuthEncoded) if err != nil { return err } - err = db.Migrator().AutoMigrate(&archived.JiraConnection{}) + pk, err := base64.StdEncoding.DecodeString(auth) if err != nil { return err } - - for _, v := range jiraConns { - conn := &archived.JiraConnection{} - conn.ID = v.ID - conn.Name = v.Name - conn.Endpoint = v.Endpoint - conn.Proxy = v.Proxy - conn.RateLimitPerHour = v.RateLimit - - c := config.GetConfig() - encKey := c.GetString(core.EncodeKeyEnvStr) - if encKey == "" { - return fmt.Errorf("jira v0.11 invalid encKey") - } - auth, err := core.Decrypt(encKey, v.BasicAuthEncoded) + originInfo := strings.Split(string(pk), ":") + if len(originInfo) == 2 { + conn.Username = originInfo[0] + conn.Password, err = core.Encrypt(encKey, originInfo[1]) if err != nil { return err } - pk, err := base64.StdEncoding.DecodeString(auth) - if err != nil { - return err - } - originInfo := strings.Split(string(pk), ":") - if len(originInfo) == 2 { - conn.Username = originInfo[0] - conn.Password, err = core.Encrypt(encKey, originInfo[1]) - if err != nil { - return err - } - // create - db.Create(&conn) + // create + err := db.Create(&conn) + if err.Error != nil { + return err.Error } } } - } else { - c := config.GetConfig() - encKey := c.GetString("ENCODE_KEY") - if encKey == "" { - return fmt.Errorf("jira invalid encKey") - } - err := db.Migrator().AutoMigrate(&archived.JiraConnection{}) - if err != nil { - return err - } + } + + err = db.Migrator().DropTable(&JiraConnectionV011{}) + if err != nil { + return err + } + err = db.Migrator().RenameTable(JiraConnectionTemp{}, archived.JiraConnection{}) + if err != nil { + return err } return db.Migrator().AutoMigrate( diff --git a/plugins/jira/models/migrationscripts/register.go b/plugins/jira/models/migrationscripts/register.go index 3c89eaff5f7..4825b43df6f 100644 --- a/plugins/jira/models/migrationscripts/register.go +++ b/plugins/jira/models/migrationscripts/register.go @@ -24,6 +24,7 @@ import ( // All return all the migration scripts func All() []migration.Script { return []migration.Script{ + new(InitSchemas), new(renameSourceTable), new(addInitTables), }