From 42c9905e16232b834089c746ec8e6b4c94aee5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Espino=20Garc=C3=ADa?= Date: Fri, 11 Oct 2024 21:32:17 +0200 Subject: [PATCH] Update root post update at on reply delete (#28688) * Update root post update at on reply delete * Address feedback --- server/channels/store/sqlstore/post_store.go | 7 +++ server/channels/store/storetest/post_store.go | 60 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/server/channels/store/sqlstore/post_store.go b/server/channels/store/sqlstore/post_store.go index 422a288688..14242ddb87 100644 --- a/server/channels/store/sqlstore/post_store.go +++ b/server/channels/store/sqlstore/post_store.go @@ -951,6 +951,13 @@ func (s *SqlPostStore) Delete(rctx request.CTX, postID string, time int64, delet err = s.deleteThread(transaction, postID, time) } else { err = s.updateThreadAfterReplyDeletion(transaction, id.RootId, id.UserId) + updatePostQuery := s.getQueryBuilder(). + Update("Posts"). + Set("UpdateAt", time). + Where(sq.Eq{"Id": id.RootId}) + if _, err = transaction.ExecBuilder(updatePostQuery); err != nil { + mlog.Warn("Error updating Post UpdateAt.", mlog.Err(err)) + } } if err != nil { diff --git a/server/channels/store/storetest/post_store.go b/server/channels/store/storetest/post_store.go index b394f9ec65..df7e1a58e8 100644 --- a/server/channels/store/storetest/post_store.go +++ b/server/channels/store/storetest/post_store.go @@ -1242,6 +1242,66 @@ func testPostStoreDelete(t *testing.T, rctx request.CTX, ss store.Store) { require.NoError(t, err) }) + t.Run("root post update at is updated upon reply delete", func(t *testing.T) { + teamId := model.NewId() + channel, err := ss.Channel().Save(rctx, &model.Channel{ + TeamId: teamId, + DisplayName: "DisplayName1", + Name: "channel" + model.NewId(), + Type: model.ChannelTypeOpen, + }, -1) + require.NoError(t, err) + + // Create a root post + rootPost1, err := ss.Post().Save(rctx, &model.Post{ + ChannelId: channel.Id, + UserId: model.NewId(), + Message: NewTestId(), + }) + require.NoError(t, err) + + // Reply to that root post + _, err = ss.Post().Save(rctx, &model.Post{ + ChannelId: rootPost1.ChannelId, + UserId: model.NewId(), + Message: NewTestId(), + RootId: rootPost1.Id, + }) + require.NoError(t, err) + + // Reply to that root post a second time + replyPost2, err := ss.Post().Save(rctx, &model.Post{ + ChannelId: rootPost1.ChannelId, + UserId: model.NewId(), + Message: NewTestId(), + RootId: rootPost1.Id, + }) + require.NoError(t, err) + + // Reply to that root post a third time + _, err = ss.Post().Save(rctx, &model.Post{ + ChannelId: rootPost1.ChannelId, + UserId: model.NewId(), + Message: NewTestId(), + RootId: rootPost1.Id, + }) + require.NoError(t, err) + + updatedRootPost, err := ss.Post().GetSingle(rctx, rootPost1.Id, false) + require.NoError(t, err) + + beforeDeleteTime := updatedRootPost.UpdateAt + + // Delete the reply previous to last + err = ss.Post().Delete(rctx, replyPost2.Id, model.GetMillis(), "") + require.NoError(t, err) + + updatedRootPost, err = ss.Post().GetSingle(rctx, rootPost1.Id, false) + require.NoError(t, err) + + require.Greater(t, updatedRootPost.UpdateAt, beforeDeleteTime) + }) + t.Run("thread with multiple replies, update thread last reply at", func(t *testing.T) { teamId := model.NewId() channel, err := ss.Channel().Save(rctx, &model.Channel{