diff options
author | Saturnino Abril <saturnino.abril@gmail.com> | 2017-04-19 05:15:15 +0900 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-04-18 16:15:15 -0400 |
commit | d2b86f1b8de4784baf578b611cf80779ccfa722a (patch) | |
tree | 076d56f2522c0d9580e04061db3cce99facce67b /app/reaction.go | |
parent | 8aab290d10cc7cdd864cebbd463044abfa2d2aea (diff) | |
download | chat-d2b86f1b8de4784baf578b611cf80779ccfa722a.tar.gz chat-d2b86f1b8de4784baf578b611cf80779ccfa722a.tar.bz2 chat-d2b86f1b8de4784baf578b611cf80779ccfa722a.zip |
APIv4 POST /reactions (#6092)
* APIv4 POST /reactions
* update corresponding V3 endpoint
Diffstat (limited to 'app/reaction.go')
-rw-r--r-- | app/reaction.go | 34 |
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) +} |