MM-49845: fixes acknowledgements in getpostsince (#22124)
* MM-49845: fixes acknowledgements in getpostsince GetPostsSince returns posts updated after a user requested date. If a user acknowledges a post the post's update at won't change thus not getting that post returned from GetPostsSince. This is troublesome particularly for the mobile client since it relies a lot to GetPostsSince for keeping the data up to date. This commit updates the post's update_at when a user acknowledges/un-acknowledges a post fixing this way the issue above. * Fixes linter * Apply suggestions from code review style changes Co-authored-by: Jesse Hallam <jesse@thehallams.ca> * Rename ack to acknowledgement Co-authored-by: Jesse Hallam <jesse@thehallams.ca>
Этот коммит содержится в:
@@ -58,6 +58,12 @@ func (s *SqlPostAcknowledgementStore) Save(postID, userID string, acknowledgedAt
|
||||
return nil, err
|
||||
}
|
||||
|
||||
transaction, err := s.GetMasterX().Beginx()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "begin_transaction")
|
||||
}
|
||||
defer finalizeTransactionX(transaction, &err)
|
||||
|
||||
query := s.getQueryBuilder().
|
||||
Insert("PostAcknowledgements").
|
||||
Columns("PostId", "UserId", "AcknowledgedAt").
|
||||
@@ -69,28 +75,54 @@ func (s *SqlPostAcknowledgementStore) Save(postID, userID string, acknowledgedAt
|
||||
query = query.SuffixExpr(sq.Expr("ON CONFLICT (postid, userid) DO UPDATE SET AcknowledgedAt = ?", acknowledgement.AcknowledgedAt))
|
||||
}
|
||||
|
||||
_, err := s.GetMasterX().ExecBuilder(query)
|
||||
_, err = transaction.ExecBuilder(query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = updatePost(transaction, acknowledgement.PostId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = transaction.Commit()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "commit_transaction")
|
||||
}
|
||||
|
||||
return acknowledgement, nil
|
||||
}
|
||||
|
||||
func (s *SqlPostAcknowledgementStore) Delete(ack *model.PostAcknowledgement) error {
|
||||
func (s *SqlPostAcknowledgementStore) Delete(acknowledgement *model.PostAcknowledgement) error {
|
||||
transaction, err := s.GetMasterX().Beginx()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "begin_transaction")
|
||||
}
|
||||
defer finalizeTransactionX(transaction, &err)
|
||||
|
||||
query := s.getQueryBuilder().
|
||||
Update("PostAcknowledgements").
|
||||
Set("AcknowledgedAt", 0).
|
||||
Where(sq.And{
|
||||
sq.Eq{"PostId": ack.PostId},
|
||||
sq.Eq{"UserId": ack.UserId},
|
||||
sq.Eq{"PostId": acknowledgement.PostId},
|
||||
sq.Eq{"UserId": acknowledgement.UserId},
|
||||
})
|
||||
|
||||
_, err := s.GetMasterX().ExecBuilder(query)
|
||||
_, err = transaction.ExecBuilder(query)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = updatePost(transaction, acknowledgement.PostId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = transaction.Commit()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "commit_transaction")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -142,3 +174,18 @@ func (s *SqlPostAcknowledgementStore) GetForPosts(postIds []string) ([]*model.Po
|
||||
|
||||
return acknowledgements, nil
|
||||
}
|
||||
|
||||
func updatePost(transaction *sqlxTxWrapper, postId string) error {
|
||||
_, err := transaction.Exec(
|
||||
`UPDATE
|
||||
Posts
|
||||
SET
|
||||
UpdateAt = ?
|
||||
WHERE
|
||||
Id = ?`,
|
||||
model.GetMillis(),
|
||||
postId,
|
||||
)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user