mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-05 06:18:07 -06:00
[chore] Tidy up status deletion, remove from cache too (#845)
* add func for deleting status from db + cache * move deletes entirely back to processor and also only do a delete if the requesting account owns the item being deleted * tidy up unboost processing * delete status more efficiently * fix wrong account id on remote test attachments * fix federator test
This commit is contained in:
parent
8c20626c51
commit
4cf76a2bfc
12 changed files with 113 additions and 94 deletions
|
|
@ -227,6 +227,42 @@ func (s *statusDB) UpdateStatus(ctx context.Context, status *gtsmodel.Status) (*
|
|||
return status, err
|
||||
}
|
||||
|
||||
func (s *statusDB) DeleteStatusByID(ctx context.Context, id string) db.Error {
|
||||
err := s.conn.RunInTx(ctx, func(tx bun.Tx) error {
|
||||
// delete links between this status and any emojis it uses
|
||||
if _, err := tx.
|
||||
NewDelete().
|
||||
Model(>smodel.StatusToEmoji{}).
|
||||
Where("status_id = ?", bun.Ident(id)).
|
||||
Exec(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// delete links between this status and any tags it uses
|
||||
if _, err := tx.
|
||||
NewDelete().
|
||||
Model(>smodel.StatusToTag{}).
|
||||
Where("status_id = ?", bun.Ident(id)).
|
||||
Exec(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// delete the status itself
|
||||
if _, err := tx.
|
||||
NewDelete().
|
||||
Model(>smodel.Status{ID: id}).
|
||||
WherePK().
|
||||
Exec(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.cache.Invalidate(id)
|
||||
return nil
|
||||
})
|
||||
|
||||
return s.conn.ProcessError(err)
|
||||
}
|
||||
|
||||
func (s *statusDB) GetStatusParents(ctx context.Context, status *gtsmodel.Status, onlyDirect bool) ([]*gtsmodel.Status, db.Error) {
|
||||
parents := []*gtsmodel.Status{}
|
||||
s.statusParent(ctx, status, &parents, onlyDirect)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||
)
|
||||
|
||||
type StatusTestSuite struct {
|
||||
|
|
@ -132,6 +133,15 @@ func (suite *StatusTestSuite) TestGetStatusChildren() {
|
|||
}
|
||||
}
|
||||
|
||||
func (suite *StatusTestSuite) TestDeleteStatus() {
|
||||
targetStatus := suite.testStatuses["admin_account_status_1"]
|
||||
err := suite.db.DeleteStatusByID(context.Background(), targetStatus.ID)
|
||||
suite.NoError(err)
|
||||
|
||||
_, err = suite.db.GetStatusByID(context.Background(), targetStatus.ID)
|
||||
suite.ErrorIs(err, db.ErrNoEntries)
|
||||
}
|
||||
|
||||
func TestStatusTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(StatusTestSuite))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue