137 lines
3.0 KiB
Go
137 lines
3.0 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"mh-server/config"
|
|
"time"
|
|
|
|
"github.com/codinl/go-logger"
|
|
"github.com/jinzhu/gorm"
|
|
_ "github.com/jinzhu/gorm/dialects/mysql"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
func InitDB() {
|
|
var err error
|
|
dialect := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
config.AppConfig.DBUser, config.AppConfig.DBPassword, config.AppConfig.DBHost, config.AppConfig.DBPort,
|
|
config.AppConfig.DBName)
|
|
DB, err = gorm.Open(config.AppConfig.DBDriver, dialect)
|
|
if err != nil {
|
|
fmt.Println("Connect Database Error, error = ", err)
|
|
logger.Info("Connect Database Error, error = ", err)
|
|
panic(err)
|
|
}
|
|
DB.DB().SetMaxOpenConns(1000)
|
|
DB.DB().SetMaxIdleConns(500)
|
|
DB.DB().SetConnMaxLifetime(time.Second * 10)
|
|
DB.LogMode(true)
|
|
//DB.SetLogger(DBLoggerWriter{})
|
|
DB.SingularTable(true)
|
|
if err := DB.DB().Ping(); err != nil {
|
|
fmt.Println("Ping Database Fail, error = ", err)
|
|
logger.Info("Ping Database Fail, error = ", err)
|
|
panic(err)
|
|
}
|
|
fmt.Println("DB init success")
|
|
logger.Info("DB init success")
|
|
|
|
//if config.AppConfig.Env == "dev" {
|
|
// migrateTable(DB)
|
|
//}
|
|
|
|
}
|
|
|
|
func CloseDB() {
|
|
if DB != nil {
|
|
if err := DB.Close(); err != nil {
|
|
fmt.Println("DB Close err", err)
|
|
logger.Error("DB Close err", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
type DBLoggerWriter struct {
|
|
gorm.LogWriter
|
|
}
|
|
|
|
func (DBLoggerWriter) Print(values ...interface{}) {
|
|
//logger.Info(values...)
|
|
}
|
|
|
|
func TransactionBegin() *gorm.DB {
|
|
return DB.Begin()
|
|
}
|
|
|
|
// Transaction 事务自动处理,如果有错误将回滚,否则将提交事务
|
|
func Transaction(tx *gorm.DB, err error) error {
|
|
if err == nil {
|
|
ret := tx.Commit()
|
|
if ret.Error != nil {
|
|
return ret.Error
|
|
}
|
|
return err
|
|
}
|
|
ret := tx.Rollback()
|
|
if ret.Error != nil {
|
|
return ret.Error
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func initCreateTable() {
|
|
if err := DB.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT CHARSET=utf8").AutoMigrate().Error; err != nil {
|
|
logger.Info("AutoMigrate createTable Error, error = ", err)
|
|
fmt.Println("AutoMigrate createTable err:", err)
|
|
}
|
|
|
|
}
|
|
|
|
|
|
// 测试服务器
|
|
//func InitDBTest() {
|
|
// var err error
|
|
//
|
|
// dialect := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
// "mh_dev", "m5h4parZsXjbeiFh", "39.108.188.218", "3306", "mh_dev")
|
|
//
|
|
// db, err := gorm.Open("mysql", dialect)
|
|
// if err != nil {
|
|
// logger.Infof("Open DB error [%s] with dialect[%s]", err.Error(), dialect)
|
|
// panic(err)
|
|
// }
|
|
//
|
|
// if db.DB().Ping() != nil {
|
|
// fmt.Printf("Ping DB fail: %#v", db.Error)
|
|
// panic(err)
|
|
// }
|
|
// db.SingularTable(true)
|
|
//
|
|
// db.AutoMigrate(
|
|
// &User{},
|
|
// //&LotteryInviteTargetUser{},
|
|
// &GameCard{},
|
|
// &Collection{},
|
|
// &Config{},
|
|
// &HistoryBrowsing{},
|
|
// &ShoppingCart{},
|
|
// &UserAddress{},
|
|
// &SearchHistory{},
|
|
// &Order{},
|
|
// &HotSearch{},
|
|
// &HomeCarousel{},
|
|
// &GameCardType{},
|
|
// &Store{},
|
|
// &GameType{},
|
|
// &UserOpenMemberRecord{},
|
|
// &CommonProblem{},
|
|
// &ExpressCompany{},
|
|
// &GameCardGoodsStock{},
|
|
// &GameCardGoods{},
|
|
// )
|
|
//
|
|
// fmt.Println("DB init success")
|
|
// DB = db
|
|
// logger.Info("ok")
|
|
//}
|