|
|
@ -17,6 +17,7 @@ import (
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
gormMysql "gorm.io/driver/mysql"
|
|
|
|
gormMysql "gorm.io/driver/mysql"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
|
|
|
"gorm.io/gorm/logger"
|
|
|
|
"log"
|
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"os"
|
|
|
|
"reflect"
|
|
|
|
"reflect"
|
|
|
@ -51,7 +52,7 @@ func InitConfig(path string) error {
|
|
|
|
func GetMysql() (*gorm.DB, error) {
|
|
|
|
func GetMysql() (*gorm.DB, error) {
|
|
|
|
conf := config.Config.Mysql
|
|
|
|
conf := config.Config.Mysql
|
|
|
|
mysqlDSN := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", conf.Username, conf.Password, conf.Address[0], conf.Database)
|
|
|
|
mysqlDSN := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", conf.Username, conf.Password, conf.Address[0], conf.Database)
|
|
|
|
return gorm.Open(gormMysql.Open(mysqlDSN), &gorm.Config{ /* Logger: logger.Discard */ })
|
|
|
|
return gorm.Open(gormMysql.Open(mysqlDSN), &gorm.Config{Logger: logger.Discard})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func GetMongo() (*mongo.Database, error) {
|
|
|
|
func GetMongo() (*mongo.Database, error) {
|
|
|
@ -89,6 +90,9 @@ func Main(path string) error {
|
|
|
|
mysqlDB, err := GetMysql()
|
|
|
|
mysqlDB, err := GetMysql()
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
if mysqlErr, ok := err.(*mysql.MySQLError); ok && mysqlErr.Number == 1049 {
|
|
|
|
if mysqlErr, ok := err.(*mysql.MySQLError); ok && mysqlErr.Number == 1049 {
|
|
|
|
|
|
|
|
if err := SetMongoDataVersion(mongoDB, version.Value); err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
return nil // database not exist
|
|
|
|
return nil // database not exist
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return err
|
|
|
|
return err
|
|
|
@ -115,14 +119,19 @@ func Main(path string) error {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
filter := bson.M{"key": versionKey, "value": version.Value}
|
|
|
|
if err := SetMongoDataVersion(mongoDB, version.Value); err != nil {
|
|
|
|
update := bson.M{"$set": bson.M{"key": versionKey, "value": strconv.Itoa(versionValue)}}
|
|
|
|
|
|
|
|
if _, err := mongoDB.Collection(versionTable).UpdateOne(context.Background(), filter, update, options.Update().SetUpsert(true)); err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func SetMongoDataVersion(db *mongo.Database, curver string) error {
|
|
|
|
|
|
|
|
filter := bson.M{"key": versionKey, "value": curver}
|
|
|
|
|
|
|
|
update := bson.M{"$set": bson.M{"key": versionKey, "value": strconv.Itoa(versionValue)}}
|
|
|
|
|
|
|
|
_, err := db.Collection(versionTable).UpdateOne(context.Background(), filter, update, options.Update().SetUpsert(true))
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// NewTask A mysql table B mongodb model C mongodb table
|
|
|
|
// NewTask A mysql table B mongodb model C mongodb table
|
|
|
|
func NewTask[A interface{ TableName() string }, B any, C any](gormDB *gorm.DB, mongoDB *mongo.Database, mongoDBInit func(db *mongo.Database) (B, error), convert func(v A) C) error {
|
|
|
|
func NewTask[A interface{ TableName() string }, B any, C any](gormDB *gorm.DB, mongoDB *mongo.Database, mongoDBInit func(db *mongo.Database) (B, error), convert func(v A) C) error {
|
|
|
|
obj, err := mongoDBInit(mongoDB)
|
|
|
|
obj, err := mongoDBInit(mongoDB)
|
|
|
|