[feature] /api/v1/follow_requests/outgoing (#4224)

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>

# Description

This pull request adds a new endpoint which returns a list of pending follow requests requested by the user. The test is adapted from the GET /api/v1/follow_requests test.

## 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.
- [x] I/we have made any necessary changes to documentation.
- [x] 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/4224
Co-authored-by: nicole mikołajczyk <git@mkljczk.pl>
Co-committed-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk
2025-06-02 11:46:17 +02:00
committed by tobi
parent ee180a2359
commit 5097e6d278
5 changed files with 574 additions and 0 deletions

View File

@@ -117,3 +117,42 @@ func (p *Processor) FollowRequestsGet(ctx context.Context, requestingAccount *gt
Prev: page.Prev(lo, hi),
}), nil
}
// OutgoingFollowRequestsGet fetches a list of the accounts with a pending follow request originating from the given requestingAccount (the currently authorized account).
func (p *Processor) OutgoingFollowRequestsGet(ctx context.Context, requestingAccount *gtsmodel.Account, page *paging.Page) (*apimodel.PageableResponse, gtserror.WithCode) {
// Fetch follow requests originating from the given requesting account model.
followRequests, err := p.state.DB.GetAccountFollowRequesting(ctx, requestingAccount.ID, page)
if err != nil && !errors.Is(err, db.ErrNoEntries) {
return nil, gtserror.NewErrorInternalError(err)
}
// Check for empty response.
count := len(followRequests)
if count == 0 {
return paging.EmptyResponse(), nil
}
// Get the lowest and highest
// ID values, used for paging.
lo := followRequests[count-1].ID
hi := followRequests[0].ID
// Func to fetch follow source at index.
getIdx := func(i int) *gtsmodel.Account {
return followRequests[i].TargetAccount
}
// Get a filtered slice of public API account models.
items := p.c.GetVisibleAPIAccountsPaged(ctx,
requestingAccount,
getIdx,
count,
)
return paging.PackageResponse(paging.ResponseParams{
Items: items,
Path: "/api/v1/follow_requests/outgoing",
Next: page.Next(lo, hi),
Prev: page.Prev(lo, hi),
}), nil
}