summaryrefslogtreecommitdiff
path: root/internal/db/bundb/status.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2022-09-21 19:55:52 +0200
committerLibravatar GitHub <noreply@github.com>2022-09-21 19:55:52 +0200
commit4cf76a2bfcc2c19bdd34f1bd58d8545d3499481b (patch)
tree47f558153875675cd7e4d0109e1028d2101ff8da /internal/db/bundb/status.go
parent[docs] Add --config-path to example CLI commands where needed. (#843) (diff)
downloadgotosocial-4cf76a2bfcc2c19bdd34f1bd58d8545d3499481b.tar.xz
[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
Diffstat (limited to 'internal/db/bundb/status.go')
-rw-r--r--internal/db/bundb/status.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/internal/db/bundb/status.go b/internal/db/bundb/status.go
index e247e8940..59417afe4 100644
--- a/internal/db/bundb/status.go
+++ b/internal/db/bundb/status.go
@@ -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(&gtsmodel.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(&gtsmodel.StatusToTag{}).
+ Where("status_id = ?", bun.Ident(id)).
+ Exec(ctx); err != nil {
+ return err
+ }
+
+ // delete the status itself
+ if _, err := tx.
+ NewDelete().
+ Model(&gtsmodel.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)