/
models.go
49 lines (40 loc) · 997 Bytes
/
models.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 model
import (
"fmt"
"strings"
"golang.org/x/crypto/bcrypt"
"gorm.io/gorm"
)
const (
alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
)
type Models struct {
Urls UrlModel
Users UserModel
Roles RoleModel
Tokens TokenModel
}
func NewModels(db *gorm.DB) Models {
return Models{
Users: UserModel{DB: db},
Urls: UrlModel{DB: db},
Roles: RoleModel{DB: db},
Tokens: TokenModel{DB: db},
}
}
func hashPassword(password string) (string, error) {
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return "", fmt.Errorf("could not hash password %w", err)
}
return string(hashedPassword), nil
}
func base62Encode(number uint64) string {
length := len(alphabet)
var encodedBuilder strings.Builder
encodedBuilder.Grow(10)
for ; number > 0; number = number / uint64(length) {
encodedBuilder.WriteByte(alphabet[(number % uint64(length))])
}
return encodedBuilder.String()
}