diff --git a/app/post.go b/app/post.go index 2cc8fbbbe5..f98a54f60c 100644 --- a/app/post.go +++ b/app/post.go @@ -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) { - result := <-a.Srv.Store.Post().GetFlaggedPostsForChannel(userId, channelId, offset, limit) - if result.Err != nil { - return nil, result.Err - } - return result.Data.(*model.PostList), nil + return a.Srv.Store.Post().GetFlaggedPostsForChannel(userId, channelId, offset, limit) } func (a *App) GetPermalinkPost(postId string, userId string) (*model.PostList, *model.AppError) { diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go index bc28ff39f9..d97cb6f4cb 100644 --- a/store/sqlstore/post_store.go +++ b/store/sqlstore/post_store.go @@ -236,33 +236,30 @@ func (s *SqlPostStore) GetFlaggedPostsForTeam(userId, teamId string, offset int, return pl, nil } -func (s *SqlPostStore) GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - pl := model.NewPostList() +func (s *SqlPostStore) GetFlaggedPostsForChannel(userId, channelId string, offset int, limit int) (*model.PostList, *model.AppError) { + pl := model.NewPostList() - var posts []*model.Post - query := ` - SELECT - * - FROM Posts - WHERE - Id IN (SELECT Name FROM Preferences WHERE UserId = :UserId AND Category = :Category) - AND ChannelId = :ChannelId - AND DeleteAt = 0 - ORDER BY CreateAt DESC - LIMIT :Limit OFFSET :Offset` + var posts []*model.Post + query := ` + SELECT + * + FROM Posts + WHERE + Id IN (SELECT Name FROM Preferences WHERE UserId = :UserId AND Category = :Category) + AND ChannelId = :ChannelId + AND DeleteAt = 0 + ORDER BY CreateAt DESC + 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 { - result.Err = model.NewAppError("SqlPostStore.GetFlaggedPostsForChannel", "store.sql_post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError) - } else { - for _, post := range posts { - pl.AddPost(post) - pl.AddOrder(post.Id) - } - } + 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 { + return nil, model.NewAppError("SqlPostStore.GetFlaggedPostsForChannel", "store.sql_post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError) + } + for _, post := range posts { + pl.AddPost(post) + pl.AddOrder(post.Id) + } - result.Data = pl - }) + return pl, nil } func (s *SqlPostStore) Get(id string) (*model.PostList, *model.AppError) { diff --git a/store/store.go b/store/store.go index 633fb3749f..d54a979fdb 100644 --- a/store/store.go +++ b/store/store.go @@ -220,7 +220,7 @@ type PostStore interface { GetPosts(channelId string, offset int, limit int, allowFromCache bool) (*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) - 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 GetPostsAfter(channelId string, postId string, numPosts int, offset int) StoreChannel GetPostsSince(channelId string, time int64, allowFromCache bool) StoreChannel diff --git a/store/storetest/mocks/PostStore.go b/store/storetest/mocks/PostStore.go index b5b3194707..ed574f05c1 100644 --- a/store/storetest/mocks/PostStore.go +++ b/store/storetest/mocks/PostStore.go @@ -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 -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) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, string, int, int) store.StoreChannel); ok { + var r0 *model.PostList + if rf, ok := ret.Get(0).(func(string, string, int, int) *model.PostList); ok { r0 = rf(userId, channelId, offset, limit) } else { 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 diff --git a/store/storetest/post_store.go b/store/storetest/post_store.go index ee64ead8f0..8c8aa12cb8 100644 --- a/store/storetest/post_store.go +++ b/store/storetest/post_store.go @@ -1654,7 +1654,8 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) { o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) 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 { t.Fatal("should be empty") @@ -1667,10 +1668,11 @@ func testPostStoreGetFlaggedPostsForChannel(t *testing.T, ss store.Store) { Value: "true", } - err := ss.Preference().Save(&model.Preferences{preference}) + err = ss.Preference().Save(&model.Preferences{preference}) 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 { 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}) 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 { 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 { 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 { 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 { 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}) 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 { t.Fatal("should have 1 post")