-
Notifications
You must be signed in to change notification settings - Fork 0
/
model.go
77 lines (68 loc) · 1.88 KB
/
model.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
package usersqldb
import (
"database/sql"
"fmt"
"net/mail"
"time"
"github.com/google/uuid"
"github.com/hpetrov29/restapi/business/core/user"
"github.com/hpetrov29/restapi/business/data/dbsql/mysql/dbarray"
)
// dbUser represent the structure we need for moving data
// between the app and the database.
type dbUser struct {
ID uuid.UUID `db:"user_id"`
Name string `db:"name"`
Email string `db:"email"`
Roles dbarray.String `db:"roles"`
PasswordHash []byte `db:"password_hash"`
Enabled bool `db:"enabled"`
Department sql.NullString `db:"department"`
DateCreated time.Time `db:"date_created"`
DateUpdated time.Time `db:"date_updated"`
}
func toDBUser(usr user.User) dbUser {
roles := make([]string, len(usr.Roles))
for i, role := range usr.Roles {
roles[i] = role.Name()
}
return dbUser{
ID: usr.ID,
Name: usr.Name,
Email: usr.Email.Address,
Roles: roles,
PasswordHash: usr.PasswordHash,
Department: sql.NullString{
String: usr.Department,
Valid: usr.Department != "",
},
Enabled: usr.Enabled,
DateCreated: usr.DateCreated.UTC(),
DateUpdated: usr.DateUpdated.UTC(),
}
}
func toCoreUser(dbUsr dbUser) (user.User, error) {
addr := mail.Address{
Address: dbUsr.Email,
}
roles := make([]user.Role, len(dbUsr.Roles))
for i, value := range dbUsr.Roles {
var err error
roles[i], err = user.ParseRole(value)
if err != nil {
return user.User{}, fmt.Errorf("parse role: %w", err)
}
}
usr := user.User{
ID: dbUsr.ID,
Name: dbUsr.Name,
Email: addr,
Roles: roles,
PasswordHash: dbUsr.PasswordHash,
Enabled: dbUsr.Enabled,
Department: dbUsr.Department.String,
DateCreated: dbUsr.DateCreated.In(time.Local),
DateUpdated: dbUsr.DateUpdated.In(time.Local),
}
return usr, nil
}