123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package operations
- import (
- "fmt"
- "github.com/pkg/errors"
- "gorm.io/driver/postgres"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- )
- const (
- logLevelSilent = "silent"
- logLevelError = "error"
- logLevelWarn = "warn"
- logLevelInfo = "info"
- )
- func newGormDB(dbConfig *Config) (*gorm.DB, error) {
- if dbConfig == nil {
- return nil, errors.New("没有传递数据库配置")
- }
- gormDB, err := newPostgresGormDB(dbConfig)
- if err != nil {
- return nil, err
- }
- return gormDB, nil
- }
- func newPostgresGormDB(dbConfig *Config) (*gorm.DB, error) {
- dsn := "host=%s port=%s user=%s password=%s dbname=%s sslmode=disable TimeZone=Asia/Shanghai"
- connStr := fmt.Sprintf(dsn, dbConfig.Address, dbConfig.Port, dbConfig.UserName, dbConfig.Password, dbConfig.Database)
- gormDB, err := gorm.Open(postgres.Open(connStr), &gorm.Config{
- Logger: logger.Default.LogMode(chooseLogLevel(dbConfig.LogLevel)),
- PrepareStmt: true,
- })
- if err != nil {
- return nil, errors.New(err.Error())
- }
- return gormDB, nil
- }
- func destroyGormDB(gormDB *gorm.DB) error {
- if gormDB == nil {
- return nil
- }
- db, err := gormDB.DB()
- if err != nil {
- return errors.New(err.Error())
- }
- err = db.Close()
- if err != nil {
- return errors.New(err.Error())
- }
- db = nil
- return nil
- }
- func chooseLogLevel(logLevel string) logger.LogLevel {
- switch logLevel {
- case logLevelSilent:
- return logger.Silent
- case logLevelError:
- return logger.Error
- case logLevelWarn:
- return logger.Warn
- case logLevelInfo:
- return logger.Info
- default:
- return logger.Info
- }
- }
|