migrate from github
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/XingfenD/yoresee_doc/pkg/errs"
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
var DB *gorm.DB
|
||||
|
||||
func OpenPostgres(cfg *PostgresOptions) (*gorm.DB, error) {
|
||||
if cfg == nil {
|
||||
return nil, errs.ErrPostgresOptionsNil
|
||||
}
|
||||
|
||||
dsn := fmt.Sprintf(
|
||||
"host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
|
||||
cfg.Host, cfg.Port, cfg.User, cfg.Password, cfg.Name,
|
||||
)
|
||||
|
||||
gormLogLevel, err := resolveGormLogLevel(cfg.GormLogLevel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
|
||||
Logger: logger.Default.LogMode(gormLogLevel),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
sqlDB, err := db.DB()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if cfg.MaxIdleConns > 0 {
|
||||
sqlDB.SetMaxIdleConns(cfg.MaxIdleConns)
|
||||
}
|
||||
if cfg.MaxOpenConns > 0 {
|
||||
sqlDB.SetMaxOpenConns(cfg.MaxOpenConns)
|
||||
}
|
||||
|
||||
return db, nil
|
||||
}
|
||||
|
||||
func resolveGormLogLevel(levelText string) (logger.LogLevel, error) {
|
||||
levelText = strings.TrimSpace(levelText)
|
||||
if levelText == "" {
|
||||
levelText = "info"
|
||||
}
|
||||
|
||||
switch strings.ToLower(levelText) {
|
||||
case "silent":
|
||||
return logger.Silent, nil
|
||||
case "error":
|
||||
return logger.Error, nil
|
||||
case "warn", "warning":
|
||||
return logger.Warn, nil
|
||||
case "info", "debug", "trace":
|
||||
return logger.Info, nil
|
||||
case "fatal", "panic":
|
||||
return logger.Error, nil
|
||||
default:
|
||||
return logger.Info, errs.Detail(errs.ErrInvalidGormLogLevel, levelText)
|
||||
}
|
||||
}
|
||||
|
||||
func ClosePostgres() error {
|
||||
if DB == nil {
|
||||
return nil
|
||||
}
|
||||
sqlDB, err := DB.DB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return sqlDB.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user