-
Notifications
You must be signed in to change notification settings - Fork 0
/
users.go
139 lines (106 loc) · 2.23 KB
/
users.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 savingDeposits
type Role uint
const (
REGULAR Role = iota
MANAGER
ADMIN
)
var AllRoles = []Role{REGULAR, MANAGER, ADMIN}
var stringRoles = []string{"regular", "manager", "admin"}
func (r Role) String() string {
return stringRoles[r]
}
func (r Role) Role() string {
return r.String()
}
type Resource uint
const (
USERS Resource = iota
DEPOSITS
)
var AllResources = []Resource{USERS, DEPOSITS}
var stringResources = []string{"users", "deposits"}
func (r Resource) String() string {
return stringRoles[r]
}
func (r Resource) Resource() string {
return r.String()
}
func ResourceFromString(s string) Resource {
m := map[string]Resource{
"users": USERS,
"deposits": DEPOSITS,
}
return m[s]
}
func RoleFromString(s string) Role {
m := map[string]Role{
"regular": REGULAR,
"manager": MANAGER,
"admin": ADMIN,
}
return m[s]
}
type User struct {
// Primary key
ID uid `gorm:"primary_key" json:"id"`
// Username
Username string `gorm:"unique" json:"username"`
// Password hash. Not included in json responses
PasswordHash string `json:"-"`
// Role
Role string `json:"role"`
}
type UserSession struct {
// Primary key
ID uint `gorm:"primary_key"`
// Generated token
Token string
// AuthUser associated to this session
UserID uint
User User
}
type UserCreateInput struct {
Username string `json:"username"`
Password string `json:"password"`
Role string `json:"role"`
}
type UserCreateOutput struct {
User
}
type UserReadInput struct {
// ID to lookup the apartment
Id string
}
type UserReadOutput struct {
User
}
type UserAllInput struct {
}
type UserAllOutput struct {
Users []User
}
func (o *UserAllOutput) Public() interface{} {
return o.Users
}
type UserUpdateInput struct {
Id string `json:"-"`
Password string `json:"password"`
Role string `json:"role"`
}
type UserUpdateOutput struct {
User
}
type UserDeleteInput struct {
Id string
}
type UserDeleteOutput struct {
Message string `json:"message"`
}
type UserService interface {
Create(UserCreateInput) (*UserCreateOutput, error)
Read(UserReadInput) (*UserReadOutput, error)
All(UserAllInput) (*UserAllOutput, error)
Update(UserUpdateInput) (*UserUpdateOutput, error)
Delete(UserDeleteInput) (*UserDeleteOutput, error)
}