Passed
Push — main ( 26be31...19cade )
by Yume
01:25
created

database.LoadVar   A

Complexity

Conditions 2

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 9
nop 0
dl 0
loc 12
rs 9.95
c 0
b 0
f 0
1
package database
2
3
import (
4
	"fmt"
5
	"log"
6
	"os"
7
	"strconv"
8
	"time"
9
10
	"github.com/joho/godotenv"
11
	"gorm.io/driver/postgres"
12
	"gorm.io/gorm"
13
)
14
15
var (
16
	// DBConn is a pointer to gorm.DB
17
	DBConn   *gorm.DB
18
	user     string
19
	password string
20
	host     string
21
	db       string
22
	port     string
23
)
24
25
// LoadVar
26
func LoadVar() {
27
	// Load the .env file
28
	err := godotenv.Load()
29
	if err != nil {
30
		log.Fatal("Error loading .env file")
31
	}
32
33
	user = os.Getenv("DB_USER")         // Get DB_USER from env
34
	password = os.Getenv("DB_PASSWORD") // Get DB_PASSWORD from env
35
	host = os.Getenv("DB_HOST")         // Get DB_HOST from env
36
	db = os.Getenv("DB_DB")             // Get DB_DB (db name) from env
37
	port = os.Getenv("DB_PORT")         // Get DB_PORT from env
38
39
}
40
41
// Connect creates a connection to database
42
func Connect() (err error) {
43
44
	// Load var from .env file
45
	LoadVar()
46
47
	// Convert port
48
	port, err := strconv.Atoi(port)
49
	if err != nil {
50
		return err
51
	}
52
53
	// Create postgres connection string
54
	dsn := fmt.Sprintf("user=%s password=%s host=%s dbname=%s port=%d sslmode=disable", user, password, host, db, port)
55
	// Open connection
56
	DBConn, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
57
	if err != nil {
58
		return err
59
	}
60
61
	sqlDB, err := DBConn.DB()
62
	if err != nil {
63
		return err
64
	}
65
	sqlDB.SetMaxIdleConns(10)
66
	sqlDB.SetMaxOpenConns(50)
67
	sqlDB.SetConnMaxLifetime(time.Hour)
68
69
	return nil
70
}
71