forked from indes/flowerss-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
model.go
91 lines (77 loc) · 1.91 KB
/
model.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
package model
import (
"fmt"
"time"
"github.com/jinzhu/gorm"
"go.uber.org/zap"
"moul.io/zapgorm"
"github.com/nerdneilsfield/flowerss-bot/internal/config"
"github.com/nerdneilsfield/flowerss-bot/internal/log"
"github.com/nerdneilsfield/flowerss-bot/pkg/client"
)
var db *gorm.DB
var httpClient *client.HttpClient // TODO: 将网络拉取逻辑从 model 包移除
// InitDB init db object
func InitDB() {
connectDB()
configDB()
updateTable()
initHttpClient()
}
func initHttpClient() {
clientOpts := []client.HttpClientOption{
client.WithTimeout(10 * time.Second),
}
if config.Socks5 != "" {
clientOpts = append(clientOpts, client.WithProxyURL(fmt.Sprintf("socks5://%s", config.Socks5)))
}
if config.UserAgent != "" {
clientOpts = append(clientOpts, client.WithUserAgent(config.UserAgent))
}
httpClient = client.NewHttpClient(clientOpts...)
}
func configDB() {
db.DB().SetMaxIdleConns(10)
db.DB().SetMaxOpenConns(50)
db.LogMode(config.DBLogMode)
db.SetLogger(zapgorm.New(log.Logger.WithOptions(zap.AddCallerSkip(7))))
}
func updateTable() {
createOrUpdateTable(&Subscribe{})
createOrUpdateTable(&User{})
createOrUpdateTable(&Source{})
createOrUpdateTable(&Option{})
createOrUpdateTable(&Content{})
}
// connectDB connect to db
func connectDB() {
if config.RunMode == config.TestMode {
return
}
var err error
if config.EnableMysql {
db, err = gorm.Open("mysql", config.Mysql.GetMysqlConnectingString())
} else {
db, err = gorm.Open("sqlite3", config.SQLitePath)
}
if err != nil {
zap.S().Fatalf("connect db failed, err: %+v", err)
}
}
// Disconnect disconnects from the database.
func Disconnect() {
db.Close()
}
// createOrUpdateTable create table or Migrate table
func createOrUpdateTable(model interface{}) {
if !db.HasTable(model) {
db.CreateTable(model)
} else {
db.AutoMigrate(model)
}
}
// EditTime timestamp
type EditTime struct {
CreatedAt time.Time
UpdatedAt time.Time
}