/
create.go
49 lines (42 loc) · 967 Bytes
/
create.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
package user
import (
"github.com/jinzhu/gorm"
"github.com/matoous/go-nanoid"
"golang.org/x/crypto/bcrypt"
"github.com/gomvn/gomvn/internal/entity"
)
func (s *Service) Create(name string, api bool, deploy bool, paths []string) (*entity.User, string, error) {
token, err := gonanoid.ID(TokenLength)
if err != nil {
return nil, "", err
}
tokenHash, err := bcrypt.GenerateFromPassword([]byte(token), BcryptCost)
if err != nil {
return nil, "", err
}
user := entity.User{
Name: name,
Admin: api,
TokenHash: string(tokenHash),
}
err = s.db.Transaction(func(tx *gorm.DB) error {
if err := tx.Create(&user).Error; err != nil {
return err
}
for _, path := range paths {
userPath := entity.Path{
UserID: user.ID,
Path: path,
Deploy: deploy,
}
if err := tx.Create(&userPath).Error; err != nil {
return err
}
}
return nil
})
if err != nil {
return nil, "", err
}
return &user, token, nil
}