diff options
| author | 2025-06-19 10:21:03 +0200 | |
|---|---|---|
| committer | 2025-06-19 10:21:03 +0200 | |
| commit | 29d481d76912a8b0de0eebc41e2d8bed5b17c535 (patch) | |
| tree | 610ea31156735d7bca2d95377f08c8bf36a93ad3 /internal | |
| parent | [bugfix] Remove errant `alsoKnownAs` inline `@context` entry (#4280) (diff) | |
| download | gotosocial-29d481d76912a8b0de0eebc41e2d8bed5b17c535.tar.xz | |
[bugfix] delete interaction requests when deleting account (#4278)
Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
# Description
I recently noticed that pending interaction requests don't disappear on domain suspension.
## Checklist
- [x] I/we have read the [GoToSocial contribution guidelines](https://codeberg.org/superseriousbusiness/gotosocial/src/branch/main/CONTRIBUTING.md).
- [ ] I/we have discussed the proposed changes already, either in an issue on the repository, or in the Matrix chat.
- [x] I/we have not leveraged AI to create the proposed changes.
- [x] I/we have performed a self-review of added code.
- [x] I/we have written code that is legible and maintainable by others.
- [x] I/we have commented the added code, particularly in hard-to-understand areas.
- [ ] I/we have made any necessary changes to documentation.
- [ ] I/we have added tests that cover new code.
- [x] I/we have run tests and they pass locally with the changes.
- [x] I/we have run `go fmt ./...` and `golangci-lint run`.
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4278
Co-authored-by: nicole mikołajczyk <git@mkljczk.pl>
Co-committed-by: nicole mikołajczyk <git@mkljczk.pl>
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/db/bundb/interaction.go | 22 | ||||
| -rw-r--r-- | internal/db/interaction.go | 4 | ||||
| -rw-r--r-- | internal/processing/account/delete.go | 6 |
3 files changed, 32 insertions, 0 deletions
diff --git a/internal/db/bundb/interaction.go b/internal/db/bundb/interaction.go index 3de75ded1..b42eb46f6 100644 --- a/internal/db/bundb/interaction.go +++ b/internal/db/bundb/interaction.go @@ -268,6 +268,28 @@ func (i *interactionDB) DeleteInteractionRequestByID(ctx context.Context, id str return nil } +func (i *interactionDB) DeleteInteractionRequestsByInteractingAccountID(ctx context.Context, accountID string) error { + // Gather necessary fields from + // deleted for cache invaliation. + var deleted []*gtsmodel.InteractionRequest + + if _, err := i.db.NewDelete(). + Model(&deleted). + Returning("?", bun.Ident("id")). + Where("? = ?", bun.Ident("interacting_account_id"), accountID). + Exec(ctx); err != nil && + !errors.Is(err, db.ErrNoEntries) { + return err + } + + for _, deleted := range deleted { + // Invalidate cached interaction requests by ID. + i.state.Caches.DB.InteractionRequest.Invalidate("ID", deleted.ID) + } + + return nil +} + func (i *interactionDB) GetInteractionsRequestsForAcct( ctx context.Context, acctID string, diff --git a/internal/db/interaction.go b/internal/db/interaction.go index 4e58e1db3..4a6ec7e2e 100644 --- a/internal/db/interaction.go +++ b/internal/db/interaction.go @@ -47,6 +47,10 @@ type Interaction interface { // DeleteInteractionRequestByID deletes one request with the given ID. DeleteInteractionRequestByID(ctx context.Context, id string) error + // DeleteInteractionRequestsByInteractingAccountID deletes all requests + // originating from the given account ID. + DeleteInteractionRequestsByInteractingAccountID(ctx context.Context, accountID string) error + // GetInteractionsRequestsForAcct returns pending interactions targeting // the given (optional) account ID and the given (optional) status ID. // diff --git a/internal/processing/account/delete.go b/internal/processing/account/delete.go index 682da3681..f812909c5 100644 --- a/internal/processing/account/delete.go +++ b/internal/processing/account/delete.go @@ -478,6 +478,12 @@ func (p *Processor) deleteAccountPeripheral( err != nil && !errors.Is(err, db.ErrNoEntries) { log.Errorf("error deleting poll votes by account: %v", err) } + + // Delete all interaction requests from given account, local and remote. + if err := p.state.DB.DeleteInteractionRequestsByInteractingAccountID(ctx, account.ID); // nocollapse + err != nil && !errors.Is(err, db.ErrNoEntries) { + log.Errorf("error deleting interaction requests by account: %v", err) + } } // processSideEffect will process the given side effect details, |
