/
user.go
139 lines (109 loc) · 2.59 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
128
129
130
131
132
133
134
135
136
137
138
139
package models
import (
"fmt"
"time"
)
type User struct {
Deleted int `xorm:"not null default 0 TINYINT(8)" json:"-"`
DeveloperId string `xorm:"CHAR(20)" json:"developer_id"`
LastLoginTime time.Time `xorm:"DATETIME" json:"-"`
Rtx string `xorm:"unique CHAR(32)" json:"rtx"`
UserId int `xorm:"not null pk autoincr INT(20)" json:"user_id"`
Developer *Developer `xorm:"-" json:"-"`
UserBasicInfo *UserBasicInfo `xorm:"-" json:"-"`
}
func (u *User) LoadDeveloper() error {
return u.loadDeveloper(x)
}
func (u *User) loadDeveloper(e Engine) (err error) {
if u.Developer == nil {
u.Developer, err = getDeveloperByDeveloperId(e, u.DeveloperId)
if err != nil {
return fmt.Errorf("getDeveloperByDeveloperId [%s]: %v", u.DeveloperId, err)
}
}
return nil
}
func (u *User) LoadUserBasicInfo() error {
return u.loadUserBasicInfo(x)
}
func (u *User) loadUserBasicInfo(e Engine) (err error) {
if u.UserBasicInfo == nil {
u.UserBasicInfo, err = getUserBasicInfoByUsername(e, u.Rtx)
if err != nil {
return fmt.Errorf("getUserBasicInfoByUsername [%s]: %v", u.Rtx, err)
}
}
return nil
}
func CreateUser(d *User) error {
return createUser(x, d)
}
func createUser(e Engine, d *User) error {
_, err := e.Insert(d)
return err
}
func GetUserByUserId(UserId int) (*User, error) {
return getUserByUserId(x, UserId)
}
func getUserByUserId(e Engine, UserId int) (*User, error) {
d := &User{
UserId: UserId,
}
has, err := e.Get(d)
if err != nil {
return nil, err
}
if !has {
return nil, ErrNotExist{Key: UserId}
}
return d, nil
}
func GetUserByRtx(rtx string) (*User, error) {
return getUserByRtx(x, rtx)
}
func getUserByRtx(e Engine, rtx string) (*User, error) {
d := &User{
Rtx: rtx,
}
has, err := e.Get(d)
if err != nil {
return nil, err
}
if !has {
return nil, ErrNotExist{Key: rtx}
}
return d, nil
}
type ListUsersOption struct {
developerId *string
rtx *string
}
func (opt ListUsersOption) WithDeveloperId(developerId string) ListUsersOption {
opt.developerId = &developerId
return opt
}
func (opt ListUsersOption) WithRtx(rtx string) ListUsersOption {
if rtx != "" {
rtx = rtx + "%"
opt.rtx = &rtx
}
return opt
}
func ListUsers(opt ListUsersOption) ([]*User, error) {
return listUsers(x, opt)
}
func listUsers(e Engine, opt ListUsersOption) ([]*User, error) {
var ds []*User
if opt.developerId != nil {
e.Where("developer_id = ?", *opt.developerId)
}
if opt.rtx != nil {
e.Where("rtx like ?", *opt.rtx)
}
err := e.Asc("developer_id").Find(&ds)
if err != nil {
return nil, err
}
return ds, nil
}