Passed
Push — main ( 3ec306...c5cfaa )
by Yume
01:53 queued 44s
created

infrastructures.getDSN   A

Complexity

Conditions 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
nop 1
dl 0
loc 10
rs 10
c 0
b 0
f 0
1
package infrastructures
2
3
import (
4
	"log"
5
	"os"
6
	"time"
7
8
	"github.com/memnix/memnix-rest/config"
9
	"github.com/pkg/errors"
10
	"gorm.io/driver/mysql"
11
	"gorm.io/gorm"
12
	"gorm.io/gorm/logger"
13
)
14
15
// DBConn is the database connection object
16
var DBConn *gorm.DB
17
18
// GetDBConn returns the database connection object
19
func GetDBConn() *gorm.DB {
20
	return DBConn
21
}
22
23
// ConnectDB creates a connection to database
24
//
25
// see: utils/config.go and utils/env.go for more details
26
func ConnectDB(dsn string) error {
27
	newLogger := logger.New(
28
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
29
		logger.Config{
30
			LogLevel:                  logger.Silent, // Log level
31
			IgnoreRecordNotFoundError: true,          // Ignore ErrRecordNotFound error for logger
32
			Colorful:                  true,          // Disable color
33
		},
34
	)
35
	// Open connection
36
	conn, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
37
		Logger:                                   newLogger, // Logger
38
		SkipDefaultTransaction:                   true,      // Skip default transaction
39
		DisableForeignKeyConstraintWhenMigrating: true,      // Disable foreign key constraint when migrating (planetscale recommends this)
40
	})
41
	if err != nil {
42
		return errors.Wrap(err, "failed to connect to database")
43
	}
44
45
	sqlDB, err := conn.DB() // Get sql.DB object from gorm.DB
46
	if err != nil {
47
		return errors.Wrap(err, "failed to get sql.DB object")
48
	}
49
	sqlDB.SetMaxIdleConns(config.SQLMaxIdleConns) // Set max idle connections
50
	sqlDB.SetMaxOpenConns(config.SQLMaxOpenConns) // Set max open connections
51
	sqlDB.SetConnMaxLifetime(time.Second)         // Set max connection lifetime
52
53
	DBConn = conn
54
55
	return nil
56
}
57
58
// DisconnectDB closes the database connection
59
func DisconnectDB() error {
60
	sqlDB, err := GetDBConn().DB() // Get sql.DB object from gorm.DB
61
	if err != nil {
62
		return errors.Wrap(err, "failed to get sql.DB object")
63
	}
64
	if err = sqlDB.Close(); err != nil {
65
		return errors.Wrap(err, "failed to close database connection")
66
	}
67
68
	return nil
69
}
70