summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/reaction.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/app/reaction.go b/app/reaction.go
index cc31018ec..eb542286f 100644
--- a/app/reaction.go
+++ b/app/reaction.go
@@ -7,6 +7,25 @@ import (
"github.com/mattermost/platform/model"
)
+func SaveReactionForPost(reaction *model.Reaction) (*model.Reaction, *model.AppError) {
+ post, err := GetSinglePost(reaction.PostId)
+ if err != nil {
+ return nil, err
+ }
+
+ if result := <-Srv.Store.Reaction().Save(reaction); result.Err != nil {
+ return nil, result.Err
+ } else {
+ reaction = result.Data.(*model.Reaction)
+
+ go sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_ADDED, reaction, post)
+
+ InvalidateCacheForReactions(reaction.PostId)
+
+ return reaction, nil
+ }
+}
+
func GetReactionsForPost(postId string) ([]*model.Reaction, *model.AppError) {
if result := <-Srv.Store.Reaction().GetForPost(postId, true); result.Err != nil {
return nil, result.Err
@@ -14,3 +33,18 @@ func GetReactionsForPost(postId string) ([]*model.Reaction, *model.AppError) {
return result.Data.([]*model.Reaction), nil
}
}
+
+func sendReactionEvent(event string, reaction *model.Reaction, post *model.Post) {
+ // send out that a reaction has been added/removed
+ message := model.NewWebSocketEvent(event, "", post.ChannelId, "", nil)
+ message.Add("reaction", reaction.ToJson())
+ Publish(message)
+
+ // The post is always modified since the UpdateAt always changes
+ InvalidateCacheForChannelPosts(post.ChannelId)
+ post.HasReactions = true
+ post.UpdateAt = model.GetMillis()
+ umessage := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_EDITED, "", post.ChannelId, "", nil)
+ umessage.Add("post", post.ToJson())
+ Publish(umessage)
+}