pull/1508/head
withchao 2 years ago
parent 33e644e4fd
commit ec840aa0f6

@ -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)

Loading…
Cancel
Save