-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuser_rollup.go
129 lines (101 loc) · 3.27 KB
/
user_rollup.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package frapi
import (
"github.com/bjorge/friendlyreservations/models"
)
// UserRollup is the user event rollup structure
type UserRollup struct {
UserID string
IsAdmin bool
IsMember bool
IsSystem bool
State models.UserState
Nickname string
EmailID string
EventVersion int32
}
// GetEventVersion returns the version of the rollup record
func (r *UserRollup) GetEventVersion() int {
return int(r.EventVersion)
}
func (r *PropertyResolver) rollupUsers() {
r.rollupMutexes[userRollupType].Lock()
defer r.rollupMutexes[userRollupType].Unlock()
if !r.rollupsExists(userRollupType) {
for _, event := range r.property.Events {
switch userEvent := event.(type) {
case *models.NewUserInput:
userRollup := &UserRollup{}
userRollup.UserID = userEvent.UserId
userRollup.IsSystem = userEvent.IsSystem
userRollup.IsAdmin = userEvent.IsAdmin
userRollup.IsMember = userEvent.IsMember
userRollup.State = userEvent.State
userRollup.Nickname = userEvent.Nickname
userRollup.EmailID = userEvent.EmailId
userRollup.EventVersion = userEvent.EventVersion
r.addRollup(userEvent.UserId,
userRollup, userRollupType)
case *models.UpdateUserInput:
rollups := r.getRollups(&rollupArgs{id: &userEvent.UserId}, userRollupType)
if len(rollups) > 0 {
rollup := rollups[0]
if user, ok := rollup.(*UserRollup); ok {
// make a copy
userRollup := *user
userRollup.UserID = userEvent.UserId
userRollup.IsSystem = userEvent.IsSystem
userRollup.IsAdmin = userEvent.IsAdmin
userRollup.IsMember = userEvent.IsMember
userRollup.State = userEvent.State
userRollup.Nickname = userEvent.Nickname
userRollup.EmailID = userEvent.EmailId
userRollup.EventVersion = userEvent.EventVersion
r.addRollup(userEvent.UserId,
&userRollup, userRollupType)
}
}
case *models.UpdateSystemUserInput:
rollups := r.getRollups(&rollupArgs{id: &userEvent.UserID}, userRollupType)
if len(rollups) > 0 {
rollup := rollups[0]
if user, ok := rollup.(*UserRollup); ok {
// make a copy
userRollup := *user
userRollup.UserID = userEvent.UserID
userRollup.IsSystem = true
userRollup.IsAdmin = false
userRollup.IsMember = false
userRollup.State = models.ACCEPTED
userRollup.Nickname = userEvent.Nickname
userRollup.EmailID = userEvent.EmailID
userRollup.EventVersion = userEvent.EventVersion
r.addRollup(userEvent.UserID,
&userRollup, userRollupType)
}
}
case *models.AcceptInvitationInput:
// get the user
rollups := r.getRollups(&rollupArgs{id: &userEvent.AuthorUserId}, userRollupType)
if len(rollups) > 0 {
rollup := rollups[0]
if user, ok := rollup.(*UserRollup); ok {
// make a copy
userRollup := *user
if userEvent.Accept {
userRollup.State = models.ACCEPTED
} else {
userRollup.State = models.DECLINED
}
userRollup.EventVersion = userEvent.EventVersion
r.addRollup(userEvent.AuthorUserId,
&userRollup, userRollupType)
}
}
}
}
cacheError := r.cacheRollup(userRollupType)
if cacheError != nil {
Logger.LogWarningf("cache write user rollups error: %+v", cacheError)
}
}
}