Fix #10979. GetFlaggedPostsForChannel is sync now (#11010)

Этот коммит содержится в:
Rodrigo Villablanca Vásquez
2019-06-03 08:29:09 -04:00
коммит произвёл Hanzei
родитель 2e79ae9636
Коммит 201fb5a717
5 изменённых файлов: 52 добавлений и 43 удалений

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

@@ -635,11 +635,7 @@ func (a *App) GetFlaggedPostsForTeam(userId, teamId string, offset int, limit in
} }
func (a *App) GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) (*model.PostList, *model.AppError) { func (a *App) GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) (*model.PostList, *model.AppError) {
result := <-a.Srv.Store.Post().GetFlaggedPostsForChannel(userId, channelId, offset, limit) return a.Srv.Store.Post().GetFlaggedPostsForChannel(userId, channelId, offset, limit)
if result.Err != nil {
return nil, result.Err
}
return result.Data.(*model.PostList), nil
} }
func (a *App) GetPermalinkPost(postId string, userId string) (*model.PostList, *model.AppError) { func (a *App) GetPermalinkPost(postId string, userId string) (*model.PostList, *model.AppError) {

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

@@ -236,33 +236,30 @@ func (s *SqlPostStore) GetFlaggedPostsForTeam(userId, teamId string, offset int,
return pl, nil return pl, nil
} }
func (s *SqlPostStore) GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) store.StoreChannel { func (s *SqlPostStore) GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) (*model.PostList, *model.AppError) {
return store.Do(func(result *store.StoreResult) { pl := model.NewPostList()
pl := model.NewPostList()
var posts []*model.Post var posts []*model.Post
query := ` query := `
SELECT SELECT
* *
FROM Posts FROM Posts
WHERE WHERE
Id IN (SELECT Name FROM Preferences WHERE UserId = :UserId AND Category = :Category) Id IN (SELECT Name FROM Preferences WHERE UserId = :UserId AND Category = :Category)
AND ChannelId = :ChannelId AND ChannelId = :ChannelId
AND DeleteAt = 0 AND DeleteAt = 0
ORDER BY CreateAt DESC ORDER BY CreateAt DESC
LIMIT :Limit OFFSET :Offset` LIMIT :Limit OFFSET :Offset`
if _, err := s.GetReplica().Select(&posts, query, map[string]interface{}{"UserId": userId, "Category": model.PREFERENCE_CATEGORY_FLAGGED_POST, "ChannelId": channelId, "Offset": offset, "Limit": limit}); err != nil { if _, err := s.GetReplica().Select(&posts, query, map[string]interface{}{"UserId": userId, "Category": model.PREFERENCE_CATEGORY_FLAGGED_POST, "ChannelId": channelId, "Offset": offset, "Limit": limit}); err != nil {
result.Err = model.NewAppError("SqlPostStore.GetFlaggedPostsForChannel", "store.sql_post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError) return nil, model.NewAppError("SqlPostStore.GetFlaggedPostsForChannel", "store.sql_post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError)
} else { }
for _, post := range posts { for _, post := range posts {
pl.AddPost(post) pl.AddPost(post)
pl.AddOrder(post.Id) pl.AddOrder(post.Id)
} }
}
result.Data = pl return pl, nil
})
} }
func (s *SqlPostStore) Get(id string) (*model.PostList, *model.AppError) { func (s *SqlPostStore) Get(id string) (*model.PostList, *model.AppError) {

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

@@ -220,7 +220,7 @@ type PostStore interface {
GetPosts(channelId string, offset int, limit int, allowFromCache bool) (*model.PostList, *model.AppError) GetPosts(channelId string, offset int, limit int, allowFromCache bool) (*model.PostList, *model.AppError)
GetFlaggedPosts(userId string, offset int, limit int) (*model.PostList, *model.AppError) GetFlaggedPosts(userId string, offset int, limit int) (*model.PostList, *model.AppError)
GetFlaggedPostsForTeam(userId, teamId string, offset int, limit int) (*model.PostList, *model.AppError) GetFlaggedPostsForTeam(userId, teamId string, offset int, limit int) (*model.PostList, *model.AppError)
GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) StoreChannel GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) (*model.PostList, *model.AppError)
GetPostsBefore(channelId string, postId string, numPosts int, offset int) StoreChannel GetPostsBefore(channelId string, postId string, numPosts int, offset int) StoreChannel
GetPostsAfter(channelId string, postId string, numPosts int, offset int) StoreChannel GetPostsAfter(channelId string, postId string, numPosts int, offset int) StoreChannel
GetPostsSince(channelId string, time int64, allowFromCache bool) StoreChannel GetPostsSince(channelId string, time int64, allowFromCache bool) StoreChannel

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

@@ -172,19 +172,28 @@ func (_m *PostStore) GetFlaggedPosts(userId string, offset int, limit int) (*mod
} }
// GetFlaggedPostsForChannel provides a mock function with given fields: userId, channelId, offset, limit // GetFlaggedPostsForChannel provides a mock function with given fields: userId, channelId, offset, limit
func (_m *PostStore) GetFlaggedPostsForChannel(userId string, channelId string, offset int, limit int) store.StoreChannel { func (_m *PostStore) GetFlaggedPostsForChannel(userId string, channelId string, offset int, limit int) (*model.PostList, *model.AppError) {
ret := _m.Called(userId, channelId, offset, limit) ret := _m.Called(userId, channelId, offset, limit)
var r0 store.StoreChannel var r0 *model.PostList
if rf, ok := ret.Get(0).(func(string, string, int, int) store.StoreChannel); ok { if rf, ok := ret.Get(0).(func(string, string, int, int) *model.PostList); ok {
r0 = rf(userId, channelId, offset, limit) r0 = rf(userId, channelId, offset, limit)
} else { } else {
if ret.Get(0) != nil { if ret.Get(0) != nil {
r0 = ret.Get(0).(store.StoreChannel) r0 = ret.Get(0).(*model.PostList)
} }
} }
return r0 var r1 *model.AppError
if rf, ok := ret.Get(1).(func(string, string, int, int) *model.AppError); ok {
r1 = rf(userId, channelId, offset, limit)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
} }
// GetFlaggedPostsForTeam provides a mock function with given fields: userId, teamId, offset, limit // GetFlaggedPostsForTeam provides a mock function with given fields: userId, teamId, offset, limit

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

@@ -1654,7 +1654,8 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) {
o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) o4 = (<-ss.Post().Save(o4)).Data.(*model.Post)
time.Sleep(2 * time.Millisecond) time.Sleep(2 * time.Millisecond)
r := (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)).Data.(*model.PostList) r, err := ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)
require.Nil(t, err)
if len(r.Order) != 0 { if len(r.Order) != 0 {
t.Fatal("should be empty") t.Fatal("should be empty")
@@ -1667,10 +1668,11 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) {
Value: "true", Value: "true",
} }
err := ss.Preference().Save(&model.Preferences{preference}) err = ss.Preference().Save(&model.Preferences{preference})
require.Nil(t, err) require.Nil(t, err)
r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)).Data.(*model.PostList) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)
require.Nil(t, err)
if len(r.Order) != 1 { if len(r.Order) != 1 {
t.Fatal("should have 1 post") t.Fatal("should have 1 post")
@@ -1684,25 +1686,29 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) {
err = ss.Preference().Save(&model.Preferences{preference}) err = ss.Preference().Save(&model.Preferences{preference})
require.Nil(t, err) require.Nil(t, err)
r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 1)).Data.(*model.PostList) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 1)
require.Nil(t, err)
if len(r.Order) != 1 { if len(r.Order) != 1 {
t.Fatal("should have 1 post") t.Fatal("should have 1 post")
} }
r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 1, 1)).Data.(*model.PostList) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 1, 1)
require.Nil(t, err)
if len(r.Order) != 1 { if len(r.Order) != 1 {
t.Fatal("should have 1 post") t.Fatal("should have 1 post")
} }
r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 1000, 10)).Data.(*model.PostList) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 1000, 10)
require.Nil(t, err)
if len(r.Order) != 0 { if len(r.Order) != 0 {
t.Fatal("should be empty") t.Fatal("should be empty")
} }
r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)).Data.(*model.PostList) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o1.ChannelId, 0, 10)
require.Nil(t, err)
if len(r.Order) != 2 { if len(r.Order) != 2 {
t.Fatal("should have 2 posts") t.Fatal("should have 2 posts")
@@ -1712,7 +1718,8 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) {
err = ss.Preference().Save(&model.Preferences{preference}) err = ss.Preference().Save(&model.Preferences{preference})
require.Nil(t, err) require.Nil(t, err)
r = (<-ss.Post().GetFlaggedPostsForChannel(o1.UserId, o4.ChannelId, 0, 10)).Data.(*model.PostList) r, err = ss.Post().GetFlaggedPostsForChannel(o1.UserId, o4.ChannelId, 0, 10)
require.Nil(t, err)
if len(r.Order) != 1 { if len(r.Order) != 1 {
t.Fatal("should have 1 post") t.Fatal("should have 1 post")