-
Notifications
You must be signed in to change notification settings - Fork 0
/
preference.go
67 lines (56 loc) · 1.37 KB
/
preference.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
package models
import (
"database/sql"
"errors"
"github.com/pborman/uuid"
)
/*Preference entity data*/
type Preference struct {
ID uuid.UUID `json:"id"`
UserID uuid.UUID `json:"userId" binding:"required"`
Email PreferenceState `json:"email"`
}
/*NewPreference contstructs and returns a new preference entity with it's id*/
func NewPreference(userID uuid.UUID) *Preference {
return &Preference{
ID: uuid.NewUUID(),
UserID: userID,
Email: SUBSCRIBED,
}
}
/*PreferencesFromSQL returns a preference splice from sql rows*/
func PreferencesFromSQL(rows *sql.Rows) ([]*Preference, error) {
preferences := make([]*Preference, 0)
for rows.Next() {
p := &Preference{}
var email string
rows.Scan(&p.ID, &p.UserID, &email)
var ok bool
p.Email, ok = toPreferenceState(email)
if !ok {
return nil, errors.New("invalid email preference")
}
preferences = append(preferences, p)
}
return preferences, nil
}
func toPreferenceState(s string) (PreferenceState, bool) {
switch s {
case SUBSCRIBED:
return SUBSCRIBED, true
case UNSUBSCRIBED:
return UNSUBSCRIBED, true
case MINIMAL:
return MINIMAL, true
default:
return "", false
}
}
/*PreferenceState wraps valid preference state strings*/
type PreferenceState string
/*valid preference states*/
const (
SUBSCRIBED = "SUBSCRIBED"
UNSUBSCRIBED = "UNSUBSCRIBED"
MINIMAL = "MINIMAL"
)