-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.go
76 lines (68 loc) · 1.75 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
// Package user contains user application services
package user
import (
"github.com/gin-gonic/gin"
"github.com/crouse/pms/internal"
"github.com/crouse/pms/internal/errors"
"github.com/crouse/pms/internal/platform/query"
"github.com/crouse/pms/internal/platform/structs"
)
// New creates new user application service
func New(udb model.UserDB, rbac model.RBACService, auth model.AuthService) *Service {
return &Service{udb: udb, rbac: rbac, auth: auth}
}
// Service represents user application service
type Service struct {
udb model.UserDB
rbac model.RBACService
auth model.AuthService
}
// List returns list of users
func (s *Service) List(c *gin.Context, p *model.Pagination) ([]model.User, error) {
u := s.auth.User(c)
q, err := query.List(u)
if err != nil {
return nil, err
}
return s.udb.List(c, q, p)
}
// View returns single user
func (s *Service) View(c *gin.Context, id int) (*model.User, error) {
if !s.rbac.EnforceUser(c, id) {
return nil, apperr.Forbidden
}
return s.udb.View(c, id)
}
// Delete deletes a user
func (s *Service) Delete(c *gin.Context, id int) error {
u, err := s.udb.View(c, id)
if err != nil {
return err
}
if !s.rbac.IsLowerRole(c, u.Role.AccessLevel) {
return apperr.Forbidden
}
u.Delete()
return s.udb.Delete(c, u)
}
// Update contains user's information used for updating
type Update struct {
ID int
FirstName *string
LastName *string
Mobile *string
Phone *string
Address *string
}
// Update updates user's contact information
func (s *Service) Update(c *gin.Context, u *Update) (*model.User, error) {
if !s.rbac.EnforceUser(c, u.ID) {
return nil, apperr.Forbidden
}
usr, err := s.udb.View(c, u.ID)
if err != nil {
return nil, err
}
structs.Merge(usr, u)
return s.udb.Update(c, usr)
}