/
user.go
109 lines (79 loc) · 2.36 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
package resolvers
import (
"context"
"github.com/mpieczaba/nimbus/auth"
"github.com/mpieczaba/nimbus/models"
"github.com/rs/xid"
"github.com/vektah/gqlparser/v2/gqlerror"
"golang.org/x/crypto/bcrypt"
)
// Query
func (r *queryResolver) User(ctx context.Context, id *string) (*models.User, error) {
var userID string
if id != nil {
userID = *id
} else {
claims, _ := auth.ClaimsFromContext(ctx)
userID = claims.ID
}
return r.Store.User.GetUser("id = ?", userID)
}
func (r *queryResolver) Users(ctx context.Context, after, before *string, first, last *int, username *string) (*models.UserConnection, error) {
return r.Store.User.GetAllUsers(after, before, first, last, username)
}
// Mutation
func (r *mutationResolver) CreateUser(ctx context.Context, input models.UserInput) (*models.User, error) {
if err := r.Validator.Validate(input); err != nil {
return nil, err
}
pass, err := bcrypt.GenerateFromPassword([]byte(input.Password), bcrypt.DefaultCost)
if err != nil {
return nil, gqlerror.Errorf("Cannot parse password!")
}
return r.Store.User.CreateUser(&models.User{
ID: xid.New().String(),
Username: input.Username,
Password: string(pass),
Kind: models.UserKindUser,
})
}
func (r *mutationResolver) UpdateUser(ctx context.Context, id *string, input models.UserUpdateInput) (*models.User, error) {
if err := r.Validator.Validate(input); err != nil {
return nil, err
}
var userUpdateID string
if id != nil {
userUpdateID = *id
} else {
claims, _ := auth.ClaimsFromContext(ctx)
userUpdateID = claims.ID
}
userToUpdate, err := r.Store.User.GetUser("id = ?", userUpdateID)
if err != nil {
return nil, err
}
if input.Username != "" {
userToUpdate.Username = input.Username
}
if input.Password != "" {
pass, err := bcrypt.GenerateFromPassword([]byte(input.Password), bcrypt.DefaultCost)
if err != nil {
return nil, gqlerror.Errorf("Cannot parse password!")
}
userToUpdate.Password = string(pass)
}
if input.Kind != "" {
userToUpdate.Kind = input.Kind
}
return r.Store.User.UpdateUser(userToUpdate)
}
func (r *mutationResolver) DeleteUser(ctx context.Context, id *string) (*models.User, error) {
var userDeleteID string
if id != nil {
userDeleteID = *id
} else {
claims, _ := auth.ClaimsFromContext(ctx)
userDeleteID = claims.ID
}
return r.Store.User.DeleteUser("id = ?", userDeleteID)
}