#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
Этот коммит содержится в:
Debanshu Kundu
2017-07-31 23:47:21 +05:30
коммит произвёл Saturnino Abril
родитель 59992ae4a4
Коммит 8a91235fb3
14 изменённых файлов: 574 добавлений и 66 удалений

Просмотреть файл

@@ -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
}

Просмотреть файл

@@ -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")
}
}
}

Просмотреть файл

@@ -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 {