diff options
Diffstat (limited to 'internal/db/bundb')
| -rw-r--r-- | internal/db/bundb/status.go | 36 | ||||
| -rw-r--r-- | internal/db/bundb/status_test.go | 10 | 
2 files changed, 46 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(>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) diff --git a/internal/db/bundb/status_test.go b/internal/db/bundb/status_test.go index 36e329806..a796ebdad 100644 --- a/internal/db/bundb/status_test.go +++ b/internal/db/bundb/status_test.go @@ -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))  } | 
