This repository was archived by the owner on Oct 28, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathdatabase.go
More file actions
111 lines (93 loc) · 2.23 KB
/
Copy pathdatabase.go
File metadata and controls
111 lines (93 loc) · 2.23 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package usercache
import (
"encoding/json"
"github.com/riking/marvin/slack"
"github.com/riking/marvin/slack/rtm"
)
const (
sqlMigrate1 = `CREATE TABLE module_user_cache (
user_id varchar(15) PRIMARY KEY NOT NULL,
data text
UNIQUE(user_id)
)`
sqlGetAllEntries = `SELECT * FROM module_user_cache`
// $1 = slack.UserID
sqlGetEntry = `SELECT data FROM module_user_cache WHERE user_id = $1`
// $1 = slack.UserID
// $2 = data (json encoded)
sqlUpsertEntry = `INSERT INTO module_user_cache (user_id,data) VALUES ($1, $2)
ON CONFLICT (user_id) DO UPDATE SET data = EXCLUDED.data`
)
func (mod *UserCacheModule) GetEntry(userid slack.UserID) (slack.User, error) {
var entry slack.User
var data string
stmt, err := mod.team.DB().Prepare(sqlGetEntry)
if err != nil {
return entry, nil
}
defer stmt.Close()
row := stmt.QueryRow(userid)
err = row.Scan(&data)
if err != nil {
return entry, nil
}
err = json.Unmarshal([]byte(userid), &entry)
if err != nil {
return entry, nil
}
return entry, nil
}
func (mod *UserCacheModule) LoadEntries() error {
stmt, err := mod.team.DB().Query(sqlGetAllEntries)
if err != nil {
return err
}
rtmClient := mod.team.GetRTMClient().(*rtm.Client)
defer stmt.Close()
var arr = make([]*slack.User, 200)
for stmt.Next() {
var id string
var data string
var user *slack.User
err = stmt.Scan(&id, &data)
if err != nil {
return err
}
err = json.Unmarshal([]byte(data), &user)
if err != nil {
continue
}
arr = append(arr, user)
if len(arr) >= 199 {
rtmClient.ReplaceManyUserObjects(arr, false)
arr = arr[:0]
}
}
if len(arr) >= 0 {
rtmClient.ReplaceManyUserObjects(arr, false)
arr = nil
}
return stmt.Err()
}
func (mod *UserCacheModule) UpdateEntry(userobject *slack.User) error {
return mod.UpdateEntries([]*slack.User{userobject})
}
func (mod *UserCacheModule) UpdateEntries(userobjects []*slack.User) error {
stmt, err := mod.team.DB().Prepare(sqlUpsertEntry)
if err != nil {
return err
}
defer stmt.Close()
for _, obj := range userobjects {
if obj != nil {
entrydata, err := json.Marshal(obj)
if err == nil {
_, err := stmt.Exec(obj.ID, entrydata)
if err != nil {
return err
}
}
}
}
return nil
}