Total Lines | 68 |
Duplicated Lines | 0 % |
Changes | 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 |