/
db.go
93 lines (72 loc) · 1.61 KB
/
db.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package db
import (
"errors"
"log"
"github.com/benchkram/errz"
"gorm.io/gorm"
)
// Default errors
var (
ErrDatabaseNil = errors.New("Database is nil")
ErrInvalidDatabaseType = errors.New("Invalid database type")
ErrStateNotFound = errors.New("state not found")
ErrDuplicateUserMail = errors.New("User with this email already in database")
)
const (
host = "localhost"
port = "5432"
user = "postgres"
password = "postgres"
name = "postgres"
nameTesting = "bob_testdb"
connectStr = "host=%s port=%s user=%s dbname=%s password=%s sslmode=disable"
)
type Database interface {
Gorm() *gorm.DB
Connect() error
}
type database struct {
gorm *gorm.DB
// dbType is the database type
dbType DatabaseType
// digital ocean postgres
token string
clusterID string
privateDBConnection bool
// postgres
host string
port string
user string
password string
databaseName string
useSSL bool
}
func New(opts ...Option) Database {
database := &database{}
for _, opt := range opts {
opt(database)
}
return database
}
func (db *database) Connect() (err error) {
defer errz.Recover(&err)
switch db.dbType {
case DigitalOceanPostgres:
gormDB, err := db.connectDigitalOceanPostgres()
errz.Fatal(err)
db.gorm = gormDB
case Postgres:
gormDB, err := db.connectPostgres()
errz.Fatal(err)
db.gorm = gormDB
default:
return ErrInvalidDatabaseType
}
log.Printf("Successfully connected to database [%s]\n", db.dbType)
err = db.migrate()
errz.Fatal(err)
return nil
}
func (db *database) Gorm() *gorm.DB {
return db.gorm
}