diff --git a/app/post.go b/app/post.go index 1668c0c419..d92c3aa540 100644 --- a/app/post.go +++ b/app/post.go @@ -735,8 +735,8 @@ func (a *App) DeletePost(postId, deleteByID string) (*model.Post, *model.AppErro return nil, err } - if result := <-a.Srv.Store.Post().Delete(postId, model.GetMillis(), deleteByID); result.Err != nil { - return nil, result.Err + if err := a.Srv.Store.Post().Delete(postId, model.GetMillis(), deleteByID); err != nil { + return nil, err } message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_POST_DELETED, "", post.ChannelId, "", nil) diff --git a/store/sqlstore/post_store.go b/store/sqlstore/post_store.go index 9d8c761975..d1828cea9f 100644 --- a/store/sqlstore/post_store.go +++ b/store/sqlstore/post_store.go @@ -399,26 +399,26 @@ func (s *SqlPostStore) GetEtag(channelId string, allowFromCache bool) store.Stor }) } -func (s *SqlPostStore) Delete(postId string, time int64, deleteByID string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { +func (s *SqlPostStore) Delete(postId string, time int64, deleteByID string) *model.AppError { - appErr := func(errMsg string) *model.AppError { - return model.NewAppError("SqlPostStore.Delete", "store.sql_post.delete.app_error", nil, "id="+postId+", err="+errMsg, http.StatusInternalServerError) - } + appErr := func(errMsg string) *model.AppError { + return model.NewAppError("SqlPostStore.Delete", "store.sql_post.delete.app_error", nil, "id="+postId+", err="+errMsg, http.StatusInternalServerError) + } - var post model.Post - err := s.GetReplica().SelectOne(&post, "SELECT * FROM Posts WHERE Id = :Id AND DeleteAt = 0", map[string]interface{}{"Id": postId}) - if err != nil { - result.Err = appErr(err.Error()) - } + var post model.Post + err := s.GetReplica().SelectOne(&post, "SELECT * FROM Posts WHERE Id = :Id AND DeleteAt = 0", map[string]interface{}{"Id": postId}) + if err != nil { + return appErr(err.Error()) + } - post.Props[model.POST_PROPS_DELETE_BY] = deleteByID + post.Props[model.POST_PROPS_DELETE_BY] = deleteByID - _, err = s.GetMaster().Exec("UPDATE Posts SET DeleteAt = :DeleteAt, UpdateAt = :UpdateAt, Props = :Props WHERE Id = :Id OR RootId = :RootId", map[string]interface{}{"DeleteAt": time, "UpdateAt": time, "Id": postId, "RootId": postId, "Props": model.StringInterfaceToJson(post.Props)}) - if err != nil { - result.Err = appErr(err.Error()) - } - }) + _, err = s.GetMaster().Exec("UPDATE Posts SET DeleteAt = :DeleteAt, UpdateAt = :UpdateAt, Props = :Props WHERE Id = :Id OR RootId = :RootId", map[string]interface{}{"DeleteAt": time, "UpdateAt": time, "Id": postId, "RootId": postId, "Props": model.StringInterfaceToJson(post.Props)}) + if err != nil { + return appErr(err.Error()) + } + + return nil } func (s *SqlPostStore) permanentDelete(postId string) store.StoreChannel { diff --git a/store/store.go b/store/store.go index b3678ed79f..cfb4a5934e 100644 --- a/store/store.go +++ b/store/store.go @@ -215,7 +215,7 @@ type PostStore interface { Update(newPost *model.Post, oldPost *model.Post) StoreChannel Get(id string) StoreChannel GetSingle(id string) StoreChannel - Delete(postId string, time int64, deleteByID string) StoreChannel + Delete(postId string, time int64, deleteByID string) *model.AppError PermanentDeleteByUser(userId string) StoreChannel PermanentDeleteByChannel(channelId string) StoreChannel GetPosts(channelId string, offset int, limit int, allowFromCache bool) StoreChannel diff --git a/store/storetest/mocks/PostStore.go b/store/storetest/mocks/PostStore.go index 2f169bd96e..6f8742f870 100644 --- a/store/storetest/mocks/PostStore.go +++ b/store/storetest/mocks/PostStore.go @@ -67,15 +67,15 @@ func (_m *PostStore) ClearCaches() { } // Delete provides a mock function with given fields: postId, time, deleteByID -func (_m *PostStore) Delete(postId string, time int64, deleteByID string) store.StoreChannel { +func (_m *PostStore) Delete(postId string, time int64, deleteByID string) *model.AppError { ret := _m.Called(postId, time, deleteByID) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, int64, string) store.StoreChannel); ok { + var r0 *model.AppError + if rf, ok := ret.Get(0).(func(string, int64, string) *model.AppError); ok { r0 = rf(postId, time, deleteByID) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).(*model.AppError) } } diff --git a/store/storetest/post_store.go b/store/storetest/post_store.go index cbfa8896c2..3870b2e051 100644 --- a/store/storetest/post_store.go +++ b/store/storetest/post_store.go @@ -314,8 +314,8 @@ func testPostStoreDelete(t *testing.T, ss store.Store) { } } - if r2 := <-ss.Post().Delete(o1.Id, model.GetMillis(), deleteByID); r2.Err != nil { - t.Fatal(r2.Err) + if err := ss.Post().Delete(o1.Id, model.GetMillis(), deleteByID); err != nil { + t.Fatal(err) } r5 := <-ss.Post().GetPostsCreatedAt(o1.ChannelId, o1.CreateAt) @@ -351,8 +351,8 @@ func testPostStoreDelete1Level(t *testing.T, ss store.Store) { o2.RootId = o1.Id o2 = (<-ss.Post().Save(o2)).Data.(*model.Post) - if r2 := <-ss.Post().Delete(o1.Id, model.GetMillis(), ""); r2.Err != nil { - t.Fatal(r2.Err) + if err := ss.Post().Delete(o1.Id, model.GetMillis(), ""); err != nil { + t.Fatal(err) } if r3 := (<-ss.Post().Get(o1.Id)); r3.Err == nil { @@ -393,8 +393,8 @@ func testPostStoreDelete2Level(t *testing.T, ss store.Store) { o4.Message = "zz" + model.NewId() + "b" o4 = (<-ss.Post().Save(o4)).Data.(*model.Post) - if r2 := <-ss.Post().Delete(o1.Id, model.GetMillis(), ""); r2.Err != nil { - t.Fatal(r2.Err) + if err := ss.Post().Delete(o1.Id, model.GetMillis(), ""); err != nil { + t.Fatal(err) } if r3 := (<-ss.Post().Get(o1.Id)); r3.Err == nil { @@ -526,7 +526,9 @@ func testPostStoreGetWithChildren(t *testing.T, ss store.Store) { } } - store.Must(ss.Post().Delete(o3.Id, model.GetMillis(), "")) + if err := ss.Post().Delete(o3.Id, model.GetMillis(), ""); err != nil { + t.Fatal(err) + } if r2 := <-ss.Post().Get(o1.Id); r2.Err != nil { t.Fatal(r2.Err) @@ -537,7 +539,9 @@ func testPostStoreGetWithChildren(t *testing.T, ss store.Store) { } } - store.Must(ss.Post().Delete(o2.Id, model.GetMillis(), "")) + if err := ss.Post().Delete(o2.Id, model.GetMillis(), ""); err != nil { + t.Fatal(err) + } if r3 := <-ss.Post().Get(o1.Id); r3.Err != nil { t.Fatal(r3.Err) @@ -1726,7 +1730,9 @@ func testPostStoreGetPostsByIds(t *testing.T, ss store.Store) { t.Fatalf("Expected 3 posts in results. Got %v", len(ro4)) } - store.Must(ss.Post().Delete(ro1.Id, model.GetMillis(), "")) + if err := ss.Post().Delete(ro1.Id, model.GetMillis(), ""); err != nil { + t.Fatal(err) + } if ro5 := store.Must(ss.Post().GetPostsByIds(postIds)).([]*model.Post); len(ro5) != 3 { t.Fatalf("Expected 3 posts in results. Got %v", len(ro5))