From 9f4c703f1ea8afac3384404aedbf2da5e6320b87 Mon Sep 17 00:00:00 2001 From: Evan do Carmo <34245571+carmo-evan@users.noreply.github.com> Date: Wed, 29 May 2019 12:05:59 -0400 Subject: [PATCH] MM-15847 migrating getFlaggedPosts to sync by default (#10995) --- app/post.go | 6 +----- store/sqlstore/post_store.go | 26 ++++++++++++-------------- store/store.go | 2 +- store/storetest/mocks/PostStore.go | 19 ++++++++++++++----- store/storetest/post_store.go | 26 +++++++++++++++++--------- 5 files changed, 45 insertions(+), 34 deletions(-) diff --git a/app/post.go b/app/post.go index d8a2cb9fd7..88d949f401 100644 --- a/app/post.go +++ b/app/post.go @@ -641,11 +641,7 @@ func (a *App) GetPostThread(postId string) (*model.PostList, *model.AppError) { } func (a *App) GetFlaggedPosts(userId string, offset int, limit int) (*model.PostList, *model.AppError) { - result := <-a.Srv.Store.Post().GetFlaggedPosts(userId, offset, limit) - if result.Err != nil { - return nil, result.Err - } - return result.Data.(*model.PostList), nil + return a.Srv.Store.Post().GetFlaggedPosts(userId, offset, limit) } func (a *App) GetFlaggedPostsForTeam(userId, teamId string, offset int, limit int) (*model.PostList, *model.AppError) { diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go index b092803f92..bc02ea7996 100644 --- a/store/sqlstore/post_store.go +++ b/store/sqlstore/post_store.go @@ -179,22 +179,20 @@ func (s *SqlPostStore) Overwrite(post *model.Post) (*model.Post, *model.AppError return post, nil } -func (s *SqlPostStore) GetFlaggedPosts(userId string, offset int, limit int) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - pl := model.NewPostList() +func (s *SqlPostStore) GetFlaggedPosts(userId string, offset int, limit int) (*model.PostList, *model.AppError) { + pl := model.NewPostList() - var posts []*model.Post - if _, err := s.GetReplica().Select(&posts, "SELECT * FROM Posts WHERE Id IN (SELECT Name FROM Preferences WHERE UserId = :UserId AND Category = :Category) AND DeleteAt = 0 ORDER BY CreateAt DESC LIMIT :Limit OFFSET :Offset", map[string]interface{}{"UserId": userId, "Category": model.PREFERENCE_CATEGORY_FLAGGED_POST, "Offset": offset, "Limit": limit}); err != nil { - result.Err = model.NewAppError("SqlPostStore.GetFlaggedPosts", "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) - } - } + var posts []*model.Post + if _, err := s.GetReplica().Select(&posts, "SELECT * FROM Posts WHERE Id IN (SELECT Name FROM Preferences WHERE UserId = :UserId AND Category = :Category) AND DeleteAt = 0 ORDER BY CreateAt DESC LIMIT :Limit OFFSET :Offset", map[string]interface{}{"UserId": userId, "Category": model.PREFERENCE_CATEGORY_FLAGGED_POST, "Offset": offset, "Limit": limit}); err != nil { + return nil, model.NewAppError("SqlPostStore.GetFlaggedPosts", "store.sql_post.get_flagged_posts.app_error", nil, err.Error(), http.StatusInternalServerError) + } - result.Data = pl - }) + for _, post := range posts { + pl.AddPost(post) + pl.AddOrder(post.Id) + } + + return pl, nil } func (s *SqlPostStore) GetFlaggedPostsForTeam(userId, teamId string, offset int, limit int) (*model.PostList, *model.AppError) { diff --git a/store/store.go b/store/store.go index 1ebe17e624..7474d3b685 100644 --- a/store/store.go +++ b/store/store.go @@ -218,7 +218,7 @@ type PostStore interface { PermanentDeleteByUser(userId string) StoreChannel PermanentDeleteByChannel(channelId string) *model.AppError GetPosts(channelId string, offset int, limit int, allowFromCache bool) StoreChannel - GetFlaggedPosts(userId string, offset int, limit int) StoreChannel + 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 GetPostsBefore(channelId string, postId string, numPosts int, offset int) StoreChannel diff --git a/store/storetest/mocks/PostStore.go b/store/storetest/mocks/PostStore.go index 3d65788af8..b6dd1324bd 100644 --- a/store/storetest/mocks/PostStore.go +++ b/store/storetest/mocks/PostStore.go @@ -140,19 +140,28 @@ func (_m *PostStore) GetEtag(channelId string, allowFromCache bool) store.StoreC } // GetFlaggedPosts provides a mock function with given fields: userId, offset, limit -func (_m *PostStore) GetFlaggedPosts(userId string, offset int, limit int) store.StoreChannel { +func (_m *PostStore) GetFlaggedPosts(userId string, offset int, limit int) (*model.PostList, *model.AppError) { ret := _m.Called(userId, offset, limit) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, int, int) store.StoreChannel); ok { + var r0 *model.PostList + if rf, ok := ret.Get(0).(func(string, int, int) *model.PostList); ok { r0 = rf(userId, 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, int, int) *model.AppError); ok { + r1 = rf(userId, offset, limit) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // GetFlaggedPostsForChannel provides a mock function with given fields: userId, channelId, offset, limit diff --git a/store/storetest/post_store.go b/store/storetest/post_store.go index 1fcff15129..c989e2bd45 100644 --- a/store/storetest/post_store.go +++ b/store/storetest/post_store.go @@ -1378,7 +1378,8 @@ func testPostStoreGetFlaggedPostsForTeam(t *testing.T, ss store.Store, s SqlSupp o5 = (<-ss.Post().Save(o5)).Data.(*model.Post) time.Sleep(2 * time.Millisecond) - r1 := (<-ss.Post().GetFlaggedPosts(o1.ChannelId, 0, 2)).Data.(*model.PostList) + r1, err := ss.Post().GetFlaggedPosts(o1.ChannelId, 0, 2) + require.Nil(t, err) if len(r1.Order) != 0 { t.Fatal("should be empty") @@ -1532,7 +1533,8 @@ func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { o3 = (<-ss.Post().Save(o3)).Data.(*model.Post) time.Sleep(2 * time.Millisecond) - r1 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) + r1, err := ss.Post().GetFlaggedPosts(o1.UserId, 0, 2) + require.Nil(t, err) if len(r1.Order) != 0 { t.Fatal("should be empty") @@ -1547,10 +1549,11 @@ func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { }, } - err := ss.Preference().Save(&preferences) + err = ss.Preference().Save(&preferences) require.Nil(t, err) - r2 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) + r2, err := ss.Post().GetFlaggedPosts(o1.UserId, 0, 2) + require.Nil(t, err) if len(r2.Order) != 1 { t.Fatal("should have 1 post") @@ -1568,25 +1571,29 @@ func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { err = ss.Preference().Save(&preferences) require.Nil(t, err) - r3 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 1)).Data.(*model.PostList) + r3, err := ss.Post().GetFlaggedPosts(o1.UserId, 0, 1) + require.Nil(t, err) if len(r3.Order) != 1 { t.Fatal("should have 1 post") } - r3 = (<-ss.Post().GetFlaggedPosts(o1.UserId, 1, 1)).Data.(*model.PostList) + r3, err = ss.Post().GetFlaggedPosts(o1.UserId, 1, 1) + require.Nil(t, err) if len(r3.Order) != 1 { t.Fatal("should have 1 post") } - r3 = (<-ss.Post().GetFlaggedPosts(o1.UserId, 1000, 10)).Data.(*model.PostList) + r3, err = ss.Post().GetFlaggedPosts(o1.UserId, 1000, 10) + require.Nil(t, err) if len(r3.Order) != 0 { t.Fatal("should be empty") } - r4 := (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) + r4, err := ss.Post().GetFlaggedPosts(o1.UserId, 0, 2) + require.Nil(t, err) if len(r4.Order) != 2 { t.Fatal("should have 2 posts") @@ -1604,7 +1611,8 @@ func testPostStoreGetFlaggedPosts(t *testing.T, ss store.Store) { err = ss.Preference().Save(&preferences) require.Nil(t, err) - r4 = (<-ss.Post().GetFlaggedPosts(o1.UserId, 0, 2)).Data.(*model.PostList) + r4, err = ss.Post().GetFlaggedPosts(o1.UserId, 0, 2) + require.Nil(t, err) if len(r4.Order) != 2 { t.Fatal("should have 2 posts")