summaryrefslogtreecommitdiffstats
path: root/store
diff options
context:
space:
mode:
authorDebanshu Kundu <debanshu.kundu@joshtechnologygroup.com>2017-07-31 23:47:21 +0530
committerSaturnino Abril <saturnino.abril@gmail.com>2017-08-01 02:17:21 +0800
commit8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c (patch)
tree28496b27f4da93baa8707bf0690ef88f8cdcc178 /store
parent59992ae4a4638006ec1489dd834151b258c1728c (diff)
downloadchat-8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c.tar.gz
chat-8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c.tar.bz2
chat-8a91235fb3cdc8d094dbc2eaa0d7baa447132b3c.zip
#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
Diffstat (limited to 'store')
-rw-r--r--store/sql_post_store.go29
-rw-r--r--store/sql_post_store_test.go34
-rw-r--r--store/store.go1
3 files changed, 62 insertions, 2 deletions
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 {