-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdatabase.go
73 lines (63 loc) · 1.49 KB
/
database.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
package tbb
import (
"fmt"
"github.com/glebarez/sqlite"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/gorm"
)
type DB struct {
*gorm.DB
}
const (
DB_TYPE_SQLITE = "sqlite"
DB_TYPE_MYSQL = "mysql"
DB_TYPE_POSTGRES = "postgres"
)
// NewDB returns a new Database connection based on the given config files
func NewDB(cfg *Config, gormCfg *gorm.Config) *DB {
var (
gormDB *gorm.DB
err error
)
if gormCfg == nil {
gormCfg = &gorm.Config{}
}
switch cfg.Database.Type {
case DB_TYPE_SQLITE:
if cfg.Database.Filename == "" {
panic("database filename is required")
}
gormDB, err = gorm.Open(sqlite.Open(fmt.Sprintf("file:%s?cache=shared", cfg.Database.Filename)), gormCfg)
case DB_TYPE_MYSQL:
if cfg.Database.DSN == "" {
panic("database DSN is required")
}
gormDB, err = gorm.Open(mysql.Open(cfg.Database.DSN), gormCfg)
case DB_TYPE_POSTGRES:
if cfg.Database.DSN == "" {
panic("database DSN is required")
}
gormDB, err = gorm.Open(postgres.Open(cfg.Database.DSN), gormCfg)
default:
panic(fmt.Sprintf("unsupported database type: %s", cfg.Database.Type))
}
if err != nil {
panic(err)
}
return &DB{
DB: gormDB,
}
}
// FindUserByChatID return a user by Telegram chat id if exists or error otherwise.
func (db *DB) FindUserByChatID(chatID int64) (*User, error) {
var (
user User
err error
)
err = db.Preload("UserInfo").Preload("UserPhoto").First(&user, "chat_id = ?", chatID).Error
if err != nil {
return nil, err
}
return &user, nil
}