88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
package models
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
|
|
"git.apinb.com/bsm-sdk/core/database/sql"
|
|
"git.apinb.com/bsm-sdk/core/types"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var DBService *gorm.DB
|
|
|
|
var migrateTables = []any{
|
|
&OrderCart{},
|
|
&OrderCoupon{},
|
|
&OrderDetails{},
|
|
&OrderSummary{},
|
|
}
|
|
|
|
func New(driver string, dsn []string, options *types.SqlOptions) (err error) {
|
|
driver = strings.ToLower(driver)
|
|
|
|
switch driver {
|
|
case "mysql":
|
|
DBService, err = NewMysql(dsn, options)
|
|
case "postgres":
|
|
DBService, err = NewPostgres(dsn, options)
|
|
default:
|
|
log.Fatalln("Unsupported database driver:", driver)
|
|
return
|
|
}
|
|
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
return err
|
|
}
|
|
|
|
// auto migrate table.
|
|
err = DBService.AutoMigrate(migrateTables...)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
return err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func NewMysql(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) {
|
|
//set connection default val.
|
|
options = sql.SetOptions(options)
|
|
|
|
gormDb, err = gorm.Open(mysql.Open(dsn[0]), &gorm.Config{
|
|
SkipDefaultTransaction: true,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if options.Debug {
|
|
gormDb = gormDb.Debug()
|
|
}
|
|
|
|
// 获取通用数据库对象 sql.DB ,然后使用其提供的功能
|
|
sqlDB, _ := gormDb.DB()
|
|
// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
|
|
sqlDB.SetMaxIdleConns(options.MaxIdleConns)
|
|
// SetMaxOpenConns 设置打开数据库连接的最大数量。
|
|
sqlDB.SetMaxOpenConns(options.MaxOpenConns)
|
|
// SetConnMaxLifetime 设置了连接可复用的最大时间。
|
|
sqlDB.SetConnMaxLifetime(options.ConnMaxLifetime)
|
|
|
|
return gormDb, nil
|
|
}
|
|
|
|
func NewPostgres(dsn []string, options *types.SqlOptions) (gormDb *gorm.DB, err error) {
|
|
//set connection default val.
|
|
options = sql.SetOptions(options)
|
|
|
|
db, err := sql.NewPostgreSql(dsn[0], options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
db = db.Debug()
|
|
return db, nil
|
|
}
|