Update root post update at on reply delete (#28688)

* Update root post update at on reply delete

* Address feedback
This commit is contained in:
Daniel Espino García 2024-10-11 21:32:17 +02:00 committed by GitHub
parent d6343832d9
commit 42c9905e16
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 67 additions and 0 deletions

View File

@ -951,6 +951,13 @@ func (s *SqlPostStore) Delete(rctx request.CTX, postID string, time int64, delet
err = s.deleteThread(transaction, postID, time) err = s.deleteThread(transaction, postID, time)
} else { } else {
err = s.updateThreadAfterReplyDeletion(transaction, id.RootId, id.UserId) 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 { if err != nil {

View File

@ -1242,6 +1242,66 @@ func testPostStoreDelete(t *testing.T, rctx request.CTX, ss store.Store) {
require.NoError(t, err) 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) { t.Run("thread with multiple replies, update thread last reply at", func(t *testing.T) {
teamId := model.NewId() teamId := model.NewId()
channel, err := ss.Channel().Save(rctx, &model.Channel{ channel, err := ss.Channel().Save(rctx, &model.Channel{