Passed
Push — main ( aca4ae...d38763 )
by Yume
01:41 queued 15s
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
func LoadVar() {
26
	// Load the .env file
27
	err := godotenv.Load()
28
	if err != nil {
29
		log.Fatal("Error loading .env file")
30
	}
31
32
	user = os.Getenv("DB_USER")         // Get DB_USER from env
33
	password = os.Getenv("DB_PASSWORD") // Get DB_PASSWORD from env
34
	host = os.Getenv("DB_HOST")         // Get DB_HOST from env
35
	db = os.Getenv("DB_DB")             // Get DB_DB (db name) from env
36
	port = os.Getenv("DB_PORT")         // Get DB_PORT from env
37
38
}
39
40
// Connect creates a connection to database
41
func Connect() (err error) {
42
43
	// Load var from .env file
44
	LoadVar()
45
46
	// Convert port
47
	port, err := strconv.Atoi(port)
48
	if err != nil {
49
		return err
50
	}
51
52
	// Create postgres connection string
53
	dsn := fmt.Sprintf("user=%s password=%s host=%s dbname=%s port=%d sslmode=disable", user, password, host, db, port)
54
	// Open connection
55
	DBConn, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
56
	if err != nil {
57
		return err
58
	}
59
60
	sqlDB, err := DBConn.DB()
61
	if err != nil {
62
		return err
63
	}
64
	sqlDB.SetMaxIdleConns(10)
65
	sqlDB.SetMaxOpenConns(50)
66
	sqlDB.SetConnMaxLifetime(time.Hour)
67
68
	return nil
69
}
70