From 8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c Mon Sep 17 00:00:00 2001 From: Debanshu Kundu Date: Mon, 31 Jul 2017 23:47:21 +0530 Subject: #4755 Combining consecutive user join/leave system messages to single message and few other changes. (#5945) fix 7 and 8 remove @ at "{username} joined the channel" refactor and update test --- store/sql_post_store.go | 29 +++++++++++++++++++++++++++-- store/sql_post_store_test.go | 34 ++++++++++++++++++++++++++++++++++ store/store.go | 1 + 3 files changed, 62 insertions(+), 2 deletions(-) (limited to 'store') diff --git a/store/sql_post_store.go b/store/sql_post_store.go index e89b5e042..c66e44274 100644 --- a/store/sql_post_store.go +++ b/store/sql_post_store.go @@ -97,8 +97,7 @@ func (s SqlPostStore) Save(post *model.Post) StoreChannel { } else { time := post.UpdateAt - if post.Type != model.POST_JOIN_LEAVE && post.Type != model.POST_JOIN_CHANNEL && post.Type != model.POST_LEAVE_CHANNEL && - post.Type != model.POST_ADD_REMOVE && post.Type != model.POST_ADD_TO_CHANNEL && post.Type != model.POST_REMOVE_FROM_CHANNEL { + if !post.IsUserActivitySystemMessage() { s.GetMaster().Exec("UPDATE Channels SET LastPostAt = :LastPostAt, TotalMsgCount = TotalMsgCount + 1 WHERE Id = :ChannelId", map[string]interface{}{"LastPostAt": time, "ChannelId": post.ChannelId}) } else { // don't update TotalMsgCount for unimportant messages so that the channel isn't marked as unread @@ -1355,3 +1354,29 @@ func (s SqlPostStore) GetPostsBatchForIndexing(startTime int64, limit int) Store return storeChannel } + +func (s SqlPostStore) GetLastPostForChannel(channelId string) StoreChannel { + storeChannel := make(StoreChannel, 1) + + go func() { + result := StoreResult{} + + var post model.Post + query := ` + SELECT * FROM Posts + WHERE ChannelId = :channelId AND DeleteAt = 0 + ORDER BY CreateAt DESC + LIMIT 1 + ` + + if err := s.GetReplica().SelectOne(&post, query, map[string]interface{}{"channelId": channelId}); err != nil { + l4g.Error(err) + } + + result.Data = &post + storeChannel <- result + close(storeChannel) + }() + + return storeChannel +} diff --git a/store/sql_post_store_test.go b/store/sql_post_store_test.go index 27e816996..761e0dcdf 100644 --- a/store/sql_post_store_test.go +++ b/store/sql_post_store_test.go @@ -1661,3 +1661,37 @@ func TestPostStoreGetPostsBatchForIndexing(t *testing.T) { } } } + +func TestGetLastPostForChannel(t *testing.T) { + Setup() + + o1 := &model.Post{} + o1.ChannelId = model.NewId() + o1.UserId = model.NewId() + o1.Message = "" + o1.Type = model.POST_JOIN_CHANNEL + + o1 = (<-store.Post().Save(o1)).Data.(*model.Post) + + if r1 := <-store.Post().GetLastPostForChannel(o1.ChannelId); r1.Err != nil { + t.Fatal(r1.Err) + } else { + if r1.Data.(*model.Post).Id != o1.Id { + t.Fatal("invalid returned post") + } + } + + o2 := &model.Post{} + o2.ChannelId = o1.ChannelId + o2.UserId = model.NewId() + o2.Message = "" + + o2 = (<-store.Post().Save(o2)).Data.(*model.Post) + if r2 := <-store.Post().GetLastPostForChannel(o2.ChannelId); r2.Err != nil { + t.Fatal(r2.Err) + } else { + if r2.Data.(*model.Post).Id != o2.Id { + t.Fatal("invalid returned post") + } + } +} diff --git a/store/store.go b/store/store.go index d883ea5a2..9824ec213 100644 --- a/store/store.go +++ b/store/store.go @@ -170,6 +170,7 @@ type PostStore interface { Overwrite(post *model.Post) StoreChannel GetPostsByIds(postIds []string) StoreChannel GetPostsBatchForIndexing(startTime int64, limit int) StoreChannel + GetLastPostForChannel(channelId string) StoreChannel } type UserStore interface { -- cgit v1.2.3-1-g7c22