From 4494a5616257b08b247286c6aa0570709e2dbb81 Mon Sep 17 00:00:00 2001 From: Shobhit Gupta Date: Thu, 20 Jun 2019 05:50:06 -0700 Subject: [PATCH] Migrate Emoji.Delete to Sync by default (#11313) --- app/emoji.go | 2 +- store/sqlstore/emoji_store.go | 33 ++++++++++++++--------------- store/store.go | 2 +- store/storetest/emoji_store.go | 23 ++++++++++++-------- store/storetest/mocks/EmojiStore.go | 8 +++---- 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/app/emoji.go b/app/emoji.go index 99015b3270..a6681836f4 100644 --- a/app/emoji.go +++ b/app/emoji.go @@ -160,7 +160,7 @@ func (a *App) UploadEmojiImage(id string, imageData *multipart.FileHeader) *mode } func (a *App) DeleteEmoji(emoji *model.Emoji) *model.AppError { - if err := (<-a.Srv.Store.Emoji().Delete(emoji.Id, model.GetMillis())).Err; err != nil { + if err := a.Srv.Store.Emoji().Delete(emoji.Id, model.GetMillis()); err != nil { return err } diff --git a/store/sqlstore/emoji_store.go b/store/sqlstore/emoji_store.go index 4309a4c9bd..5fc97f46fc 100644 --- a/store/sqlstore/emoji_store.go +++ b/store/sqlstore/emoji_store.go @@ -163,24 +163,23 @@ func (es SqlEmojiStore) GetList(offset, limit int, sort string) store.StoreChann }) } -func (es SqlEmojiStore) Delete(id string, time int64) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - if sqlResult, err := es.GetMaster().Exec( - `UPDATE - Emoji - SET - DeleteAt = :DeleteAt, - UpdateAt = :UpdateAt - WHERE - Id = :Id - AND DeleteAt = 0`, map[string]interface{}{"DeleteAt": time, "UpdateAt": time, "Id": id}); err != nil { - result.Err = model.NewAppError("SqlEmojiStore.Delete", "store.sql_emoji.delete.app_error", nil, "id="+id+", err="+err.Error(), http.StatusInternalServerError) - } else if rows, _ := sqlResult.RowsAffected(); rows == 0 { - result.Err = model.NewAppError("SqlEmojiStore.Delete", "store.sql_emoji.delete.no_results", nil, "id="+id+", err="+err.Error(), http.StatusBadRequest) - } +func (es SqlEmojiStore) Delete(id string, time int64) *model.AppError { + if sqlResult, err := es.GetMaster().Exec( + `UPDATE + Emoji + SET + DeleteAt = :DeleteAt, + UpdateAt = :UpdateAt + WHERE + Id = :Id + AND DeleteAt = 0`, map[string]interface{}{"DeleteAt": time, "UpdateAt": time, "Id": id}); err != nil { + return model.NewAppError("SqlEmojiStore.Delete", "store.sql_emoji.delete.app_error", nil, "id="+id+", err="+err.Error(), http.StatusInternalServerError) + } else if rows, _ := sqlResult.RowsAffected(); rows == 0 { + return model.NewAppError("SqlEmojiStore.Delete", "store.sql_emoji.delete.no_results", nil, "id="+id+", err="+err.Error(), http.StatusBadRequest) + } - emojiCache.Remove(id) - }) + emojiCache.Remove(id) + return nil } func (es SqlEmojiStore) Search(name string, prefixOnly bool, limit int) store.StoreChannel { diff --git a/store/store.go b/store/store.go index af12a25b47..a598eadcce 100644 --- a/store/store.go +++ b/store/store.go @@ -459,7 +459,7 @@ type EmojiStore interface { GetByName(name string) StoreChannel GetMultipleByName(names []string) StoreChannel GetList(offset, limit int, sort string) StoreChannel - Delete(id string, time int64) StoreChannel + Delete(id string, time int64) *model.AppError Search(name string, prefixOnly bool, limit int) StoreChannel } diff --git a/store/storetest/emoji_store.go b/store/storetest/emoji_store.go index c018df3456..e6bba086a9 100644 --- a/store/storetest/emoji_store.go +++ b/store/storetest/emoji_store.go @@ -45,16 +45,16 @@ func testEmojiSaveDelete(t *testing.T, ss store.Store) { t.Fatal("shouldn't be able to save emoji with duplicate name") } - if result := <-ss.Emoji().Delete(emoji1.Id, time.Now().Unix()); result.Err != nil { - t.Fatal(result.Err) + if err := ss.Emoji().Delete(emoji1.Id, time.Now().Unix()); err != nil { + t.Fatal(err) } if _, err := ss.Emoji().Save(&emoji2); err != nil { t.Fatal("should be able to save emoji with duplicate name now that original has been deleted", err) } - if result := <-ss.Emoji().Delete(emoji2.Id, time.Now().Unix()+1); result.Err != nil { - t.Fatal(result.Err) + if err := ss.Emoji().Delete(emoji2.Id, time.Now().Unix()+1); err != nil { + t.Fatal(err) } } @@ -81,7 +81,8 @@ func testEmojiGet(t *testing.T, ss store.Store) { } defer func() { for _, emoji := range emojis { - store.Must(ss.Emoji().Delete(emoji.Id, time.Now().Unix())) + err := ss.Emoji().Delete(emoji.Id, time.Now().Unix()) + require.Nil(t, err) } }() @@ -127,7 +128,8 @@ func testEmojiGetByName(t *testing.T, ss store.Store) { } defer func() { for _, emoji := range emojis { - store.Must(ss.Emoji().Delete(emoji.Id, time.Now().Unix())) + err := ss.Emoji().Delete(emoji.Id, time.Now().Unix()) + require.Nil(t, err) } }() @@ -161,7 +163,8 @@ func testEmojiGetMultipleByName(t *testing.T, ss store.Store) { } defer func() { for _, emoji := range emojis { - store.Must(ss.Emoji().Delete(emoji.Id, time.Now().Unix())) + err := ss.Emoji().Delete(emoji.Id, time.Now().Unix()) + require.Nil(t, err) } }() @@ -221,7 +224,8 @@ func testEmojiGetList(t *testing.T, ss store.Store) { } defer func() { for _, emoji := range emojis { - store.Must(ss.Emoji().Delete(emoji.Id, time.Now().Unix())) + err := ss.Emoji().Delete(emoji.Id, time.Now().Unix()) + require.Nil(t, err) } }() @@ -288,7 +292,8 @@ func testEmojiSearch(t *testing.T, ss store.Store) { } defer func() { for _, emoji := range emojis { - store.Must(ss.Emoji().Delete(emoji.Id, time.Now().Unix())) + err := ss.Emoji().Delete(emoji.Id, time.Now().Unix()) + require.Nil(t, err) } }() diff --git a/store/storetest/mocks/EmojiStore.go b/store/storetest/mocks/EmojiStore.go index 75f9b9b6c2..ace709fabe 100644 --- a/store/storetest/mocks/EmojiStore.go +++ b/store/storetest/mocks/EmojiStore.go @@ -14,15 +14,15 @@ type EmojiStore struct { } // Delete provides a mock function with given fields: id, time -func (_m *EmojiStore) Delete(id string, time int64) store.StoreChannel { +func (_m *EmojiStore) Delete(id string, time int64) *model.AppError { ret := _m.Called(id, time) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func(string, int64) store.StoreChannel); ok { + var r0 *model.AppError + if rf, ok := ret.Get(0).(func(string, int64) *model.AppError); ok { r0 = rf(id, time) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).(*model.AppError) } }