forked from xuanqh/golang-api-skeleton
-
Notifications
You must be signed in to change notification settings - Fork 0
/
users.go
53 lines (46 loc) · 1.2 KB
/
users.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
package transformers
import (
"github.com/ibllex/go-fractal"
"github.com/kachit/golang-api-skeleton/infrastructure"
"github.com/kachit/golang-api-skeleton/models/entities"
)
func NewUsersTransformer(hashIds *infrastructure.HashIds) *UsersTransformer {
return &UsersTransformer{fractal.BaseTransformer{}, hashIds}
}
type UsersTransformer struct {
fractal.BaseTransformer
hashIds *infrastructure.HashIds
}
func (t *UsersTransformer) Transform(data fractal.Any) fractal.M {
result := fractal.M{}
if u := t.toUser(data); u != nil {
hash, _ := t.hashIds.EncodeUint64(u.Id)
result["id"] = hash
result["name"] = u.Name
result["email"] = u.Email
result["created_at"] = u.CreatedAt
if u.ModifiedAt != nil && !u.ModifiedAt.IsZero() {
result["modified_at"] = u.ModifiedAt
}
if !u.DeletedAt.Time.IsZero() {
result["deleted_at"] = u.DeletedAt.Time
}
}
return result
}
func (t *UsersTransformer) toUser(data fractal.Any) *entities.User {
switch b := data.(type) {
case *entities.User:
return b
case entities.User:
return &b
}
return nil
}
func transformUsersToFractal(users []*entities.User) []fractal.Any {
var u []fractal.Any
for _, user := range users {
u = append(u, *user)
}
return u
}