This repository has been archived by the owner on Nov 23, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
user.go
127 lines (104 loc) · 2.63 KB
/
user.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package data
import (
"fmt"
"strings"
"time"
"upper.io/db.v2"
"upper.io/db.v2/lib/sqlbuilder"
)
type User struct {
ID int64 `db:"id,omitempty,pk" json:"id"`
Name string `db:"name,omitempty" json:"name"`
Email string `db:"email,omitempty" json:"email"`
Password string `db:"password,omitempty" json:"-"`
UpdatedAt time.Time `db:"updated_at,omitempty" json:"updated_at"`
CreatedAt time.Time `db:"created_at,omitempty" json:"created_at"`
}
func (u User) CollectionName() string {
return "users"
}
func (u User) Query(session db.Database, query db.Cond) db.Result {
if session == nil {
session = dbSession
}
return session.Collection(u.CollectionName()).Find(query)
}
func (u *User) Load(session db.Database) error {
if session == nil {
session = dbSession
}
return u.Query(session, db.Cond{"id": u.ID}).One(u)
}
func (u *User) Find(session db.Database, query db.Cond) error {
if session == nil {
session = dbSession
}
return u.Query(session, query).One(u)
}
func (u *User) Save(session db.Database) error {
if session == nil {
session = dbSession
}
collection := session.Collection(u.CollectionName())
var err error
u.UpdatedAt = time.Now().UTC().Truncate(time.Second)
if u.ID == 0 {
var id interface{}
u.CreatedAt = u.UpdatedAt
id, err = collection.Insert(u)
if err == nil {
u.ID = id.(int64)
}
} else {
err = collection.
Find(db.Cond{"id": u.ID}).
Update(u)
}
return err
}
func (u *User) Remove(session db.Database) error {
if session == nil {
session = dbSession
}
return u.Query(session, db.Cond{"id": u.ID}).Delete()
}
func QueryUsersByEmail(name, email string) []*User {
name = strings.ToLower(name)
email = strings.ToLower(email)
sql := fmt.Sprintf(`
SELECT * from users WHERE lower(email) LIKE '%%%s%%' AND lower(name) LIKE '%%%s%%'
`, email, name)
rows, err := dbSession.Query(sql)
if err != nil {
return nil
}
var users []*User
iter := sqlbuilder.NewIterator(rows)
err = iter.All(&users)
if err != nil {
return nil
}
return users
}
func FindUsersWithinApp(appID int64, name, email string) []*User {
name = strings.ToLower(name)
email = strings.ToLower(email)
sql := fmt.Sprintf(`
SELECT users.id, users.name, users.email, users.updated_at, users.created_at
FROM users
JOIN permissions
ON permissions.user_id=users.id
WHERE permissions.app_id=%d AND lower(users.name) LIKE '%%%s%%' AND lower(users.email) LIKE '%%%s%%'
`, appID, name, email)
rows, err := dbSession.Query(sql)
if err != nil {
return nil
}
var users []*User
iter := sqlbuilder.NewIterator(rows)
err = iter.All(&users)
if err != nil {
return nil
}
return users
}