diff --git a/tools/data-conversion/chat/conversion/cmd.go b/tools/data-conversion/chat/conversion/cmd.go index c182e4cdc..295a95011 100644 --- a/tools/data-conversion/chat/conversion/cmd.go +++ b/tools/data-conversion/chat/conversion/cmd.go @@ -6,27 +6,27 @@ import ( "gorm.io/gorm/schema" ) -func FindAndInsert[V2 any, V3 schema.Tabler](v2db *gorm.DB, v3db *gorm.DB, fn func(V2) V3) error { +func FindAndInsert[V2 any, V3 schema.Tabler](v2db *gorm.DB, v3db *gorm.DB, fn func(V2) V3) (string, error) { var t V3 name := t.TableName() if err := v3db.AutoMigrate(&t); err != nil { - return fmt.Errorf("auto migrate v3 %s failed %w", name, err) + return name, fmt.Errorf("auto migrate v3 %s failed %w", name, err) } const size = 100 for i := 0; ; i++ { var v2s []V2 if err := v2db.Offset(i * size).Limit(size).Find(&v2s).Error; err != nil { - return fmt.Errorf("find v2 %s failed %w", name, err) + return name, fmt.Errorf("find v2 %s failed %w", name, err) } if len(v2s) == 0 { - return nil + return name, nil } v3s := make([]V3, 0, len(v2s)) for _, v := range v2s { v3s = append(v3s, fn(v)) } if err := v3db.Create(&v3s).Error; err != nil { - return fmt.Errorf("insert v3 %s failed %w", name, err) + return name, fmt.Errorf("insert v3 %s failed %w", name, err) } } } diff --git a/tools/data-conversion/chat/main.go b/tools/data-conversion/chat/main.go index 4b03d335f..8c07249d1 100644 --- a/tools/data-conversion/chat/main.go +++ b/tools/data-conversion/chat/main.go @@ -9,19 +9,20 @@ import ( ) func main() { - const ( + var ( usernameV2 = "root" passwordV2 = "openIM123" - addrV2 = "127.0.0.1:3306" + addrV2 = "127.0.0.1:13306" databaseV2 = "admin_chat" ) - const ( + var ( usernameV3 = "root" passwordV3 = "openIM123" - addrV3 = "127.0.0.1:3306" + addrV3 = "127.0.0.1:13306" databaseV3 = "openim_enterprise" ) + dsnV2 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV2, passwordV2, addrV2, databaseV2) dsnV3 := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", usernameV3, passwordV3, addrV3, databaseV3) dbV2, err := gorm.Open(mysql.Open(dsnV2), &gorm.Config{}) @@ -34,28 +35,32 @@ func main() { log.Println("open v3 db failed", err) return } - var fns []func() error - Append := func(fn func() error) { + var fns []func() (string, error) + + Append := func(fn func() (string, error)) { fns = append(fns, fn) } - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.Account) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.Attribute) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.Register) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.UserLoginRecord) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.Admin) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.Applet) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.ForbiddenAccount) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.InvitationRegister) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.IPForbidden) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.LimitUserLoginIP) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.RegisterAddFriend) }) - Append(func() error { return conversion.FindAndInsert(dbV2, dbV3, conversion.RegisterAddGroup) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.Account) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.Attribute) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.Register) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.UserLoginRecord) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.Admin) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.Applet) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.ForbiddenAccount) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.InvitationRegister) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.IPForbidden) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.LimitUserLoginIP) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.RegisterAddFriend) }) + Append(func() (string, error) { return conversion.FindAndInsert(dbV2, dbV3, conversion.RegisterAddGroup) }) for i := range fns { - if err := fns[i](); err != nil { - log.Printf("[%d] %s\n", i, err) + name, err := fns[i]() + if err == nil { + log.Printf("[%d/%d] %s success\n", i+1, len(fns), name) + } else { + log.Printf("[%d/%d] %s failed %s\n", i+1, len(fns), name, err) return } }