/
link_manager.go
126 lines (102 loc) · 2.56 KB
/
link_manager.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
package link_manager
import (
"errors"
om "github.com/bbakla/hands-on-microservices-kubernetes/pkg/object_model"
)
type LinkManager struct {
linkStore LinkStore
socialGraphManager om.SocialGraphManager
eventSink om.LinkManagerEvents
maxLinksPerUser int64
}
func (m *LinkManager) GetLinks(request om.GetLinksRequest) (result om.GetLinksResult, err error) {
if request.Username == "" {
err = errors.New("Userr name can't be empty")
return
}
result, err = m.linkStore.GetLinks(request)
return
}
func (m *LinkManager) AddLink(request om.AddLinkRequest) (err error) {
if request.Url == "" {
return errors.New("the URL can't be empty")
}
if request.Username == "" {
return errors.New("the user name can't be empty")
}
link, err := m.linkStore.AddLink(request)
if err != nil {
return
}
followers, err := m.socialGraphManager.GetFollowers(request.Username)
if err != nil {
return
}
if m.eventSink != nil {
for follower, _ := range followers {
m.eventSink.OnLinkAdded(follower, link)
}
}
return
}
func (m *LinkManager) UpdateLink(request om.UpdateLinkRequest) (err error) {
if request.Url == "" {
return errors.New("the URL can't be empty")
}
if request.Username == "" {
return errors.New("the user name can't be empty")
}
link, err := m.linkStore.UpdateLink(request)
if err != nil {
return
}
followers, err := m.socialGraphManager.GetFollowers(request.Username)
if err != nil {
return
}
if m.eventSink != nil {
for follower, _ := range followers {
m.eventSink.OnLinkUpdated(follower, link)
}
}
return
}
func (m *LinkManager) DeleteLink(username string, url string) (err error) {
if url == "" {
return errors.New("the URL can't be empty")
}
if username == "" {
return errors.New("the user name can't be empty")
}
err = m.linkStore.DeleteLink(username, url)
if err != nil {
return
}
followers, err := m.socialGraphManager.GetFollowers(username)
if err != nil {
return
}
if m.eventSink != nil {
for follower, _ := range followers {
m.eventSink.OnLinkDeleted(follower, url)
}
}
return
}
func NewLinkManager(linkStore LinkStore,
socialGraphManager om.SocialGraphManager,
eventSink om.LinkManagerEvents,
maxLinksPerUser int64) (om.LinkManager, error) {
if linkStore == nil {
return nil, errors.New("link store")
}
if socialGraphManager == nil {
return nil, errors.New("social graph manager can't be nil")
}
return &LinkManager{
linkStore: linkStore,
socialGraphManager: socialGraphManager,
eventSink: eventSink,
maxLinksPerUser: maxLinksPerUser,
}, nil
}