/
user.go
62 lines (53 loc) · 1.51 KB
/
user.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
package data
import (
"encoding/json"
"log"
"time"
"github.com/go-playground/validator/v10"
"github.com/google/uuid"
)
type User struct {
Address string `json:"address" binding:"required,eth_addr" validate:"required,eth_addr"`
Email string `json:"email" binding:"required,email" validate:"required,email"`
UUID string `json:"uuid,omitempty" validate:"required,uuid"`
Timestamp int64 `json:"timestamp,omitempty" validate:"gt=0"`
Type string `json:"type" binding:"required,oneof=advisor agent initiator contributor investor mentor contractor" validate:"required,oneof=advisor agent initiator contributor investor mentor contractor"`
Sponsor string `json:"sponsor" binding:"required,eth_addr" validate:"required,eth_addr"`
}
var validate = validator.New()
func (u *User) Setup() {
u.UUID = uuid.New().String()
u.Timestamp = time.Now().UnixMilli()
}
func NewUser(a, e, t, s string) *User {
u := &User{
Address: a,
Email: e,
Type: t,
Sponsor: s,
}
u.Setup()
return u
}
// IsValid tests if all fields are valid
func (u *User) IsValid() bool {
return nil == validate.Struct(u)
}
// IsSet tests if only required fields are valid
func (u *User) IsSet() bool {
err := validate.StructExcept(u, "UUID", "Timestamp")
if err != nil {
log.Print(err)
}
return nil == err
}
func (u User) String() string {
r, _ := json.Marshal(&struct {
*User
Timestamp string `json:"timestamp"`
}{
User: &u,
Timestamp: time.UnixMilli(u.Timestamp).Format(time.RFC3339Nano),
})
return string(r)
}