forked from emersion/neutron
-
Notifications
You must be signed in to change notification settings - Fork 0
/
conversations.go
78 lines (59 loc) · 1.97 KB
/
conversations.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
package events
import (
"github.com/faziloub/neutron/backend"
)
type Conversations struct {
backend.ConversationsBackend
messages backend.MessagesBackend
events backend.EventsBackend
}
func (b *Conversations) InsertMessage(user string, msg *backend.Message) (*backend.Message, error) {
hadConversation := (msg.ConversationID != "")
msg, err := b.messages.InsertMessage(user, msg)
if err == nil && msg.ConversationID != "" {
action := backend.EventCreate
if hadConversation {
action = backend.EventUpdate
}
conv, err := b.GetConversation(user, msg.ConversationID)
if err == nil {
event := backend.NewConversationDeltaEvent(msg.ConversationID, action, conv)
b.events.InsertEvent(user, event)
}
// TODO: add ConversationCounts to event
}
return msg, err
}
func (b *Conversations) UpdateMessage(user string, update *backend.MessageUpdate) (*backend.Message, error) {
msg, err := b.messages.UpdateMessage(user, update)
if err == nil && msg.ConversationID != "" {
conv, err := b.GetConversation(user, msg.ConversationID)
if err == nil {
event := backend.NewConversationDeltaEvent(msg.ConversationID, backend.EventUpdate, conv)
b.events.InsertEvent(user, event)
}
}
return msg, err
}
func (b *Conversations) DeleteMessage(user, id string) error {
msg, _ := b.GetMessage(user, id)
err := b.messages.DeleteMessage(user, id)
if err == nil && msg != nil && msg.ConversationID != "" {
conv, _ := b.GetConversation(user, msg.ConversationID)
action := backend.EventUpdate
if conv == nil {
action = backend.EventDelete
}
event := backend.NewConversationDeltaEvent(msg.ConversationID, action, conv)
b.events.InsertEvent(user, event)
// TODO: add ConversationCounts to event
}
return err
}
func NewConversations(bkd backend.ConversationsBackend, events backend.EventsBackend) backend.ConversationsBackend {
return &Conversations{
ConversationsBackend: bkd,
messages: NewMessages(bkd, events),
events: events,
}
}