/
schema.go
84 lines (67 loc) · 1.66 KB
/
schema.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
78
79
80
81
82
83
84
package fs
import "github.com/shurcooL/users"
// Tree layout:
//
// root
// └── users (newline separated JSON stream of user objects)
// user is an on-disk representation of users.User.
type user struct {
UserSpec userSpec
Elsewhere []userSpec `json:",omitempty"`
Login string
Name string `json:",omitempty"`
Email string `json:",omitempty"`
AvatarURL string `json:",omitempty"`
HTMLURL string `json:",omitempty"`
// CONSIDER.
//CreatedAt time.Time
//UpdatedAt time.Time
SiteAdmin bool `json:",omitempty"`
}
func fromUser(u users.User) user {
var elsewhere []userSpec
for _, us := range u.Elsewhere {
elsewhere = append(elsewhere, fromUserSpec(us))
}
return user{
UserSpec: fromUserSpec(u.UserSpec),
Elsewhere: elsewhere,
Login: u.Login,
Name: u.Name,
Email: u.Email,
AvatarURL: u.AvatarURL,
HTMLURL: u.HTMLURL,
//CreatedAt: u.CreatedAt,
//UpdatedAt: u.UpdatedAt,
SiteAdmin: u.SiteAdmin,
}
}
func (u user) User() users.User {
var elsewhere []users.UserSpec
for _, us := range u.Elsewhere {
elsewhere = append(elsewhere, us.UserSpec())
}
return users.User{
UserSpec: u.UserSpec.UserSpec(),
Elsewhere: elsewhere,
Login: u.Login,
Name: u.Name,
Email: u.Email,
AvatarURL: u.AvatarURL,
HTMLURL: u.HTMLURL,
//CreatedAt: u.CreatedAt,
//UpdatedAt: u.UpdatedAt,
SiteAdmin: u.SiteAdmin,
}
}
// userSpec is an on-disk representation of users.UserSpec.
type userSpec struct {
ID uint64
Domain string `json:",omitempty"`
}
func fromUserSpec(us users.UserSpec) userSpec {
return userSpec(us)
}
func (us userSpec) UserSpec() users.UserSpec {
return users.UserSpec(us)
}