jojo/services
Mathieu Fenniak e14e220651 perf: bulk load resolvers & reactions on pull request comments (#11988)
Optimize loading pull request review comments, which currently perform separate database queries for each comment in order to load the resolver of the comment, and the reactions on that comment, and the users on each reaction of the comments.

I stumbled across this ugly code, which enticed me to look into this:

80d840c128/routers/web/repo/pull.go (L1107-L1120)

It appeared to load the attachments from each comment on the pull request review page in separate database queries.  It turned out to be a noop, as the attachments are already loaded in bulk:

80d840c128/models/issues/comment_code.go (L120-L122)

but the `findCodeComments` method loads the "resolver doer" and the reactions one-by-one for each comment.  So I fixed that instead, and removed the ineffective deeply nested for loop.

## Checklist

The [contributor guide](https://forgejo.org/docs/next/contributor/) contains information that will be helpful to first time contributors. All work and communication must conform to Forgejo's [AI Agreement](https://codeberg.org/forgejo/governance/src/branch/main/AIAgreement.md). There also are a few [conditions for merging Pull Requests in Forgejo repositories](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md). You are also welcome to join the [Forgejo development chatroom](https://matrix.to/#/#forgejo-development:matrix.org).

### Tests for Go changes

- I added test coverage for Go changes...
  - [x] in their respective `*_test.go` for unit tests.
  - [ ] in the `tests/integration` directory if it involves interactions with a live Forgejo server.
- I ran...
  - [x] `make pr-go` before pushing

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [ ] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [x] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11988
Reviewed-by: Andreas Ahlenstorf <aahlenst@noreply.codeberg.org>
Co-authored-by: Mathieu Fenniak <mathieu@fenniak.net>
Co-committed-by: Mathieu Fenniak <mathieu@fenniak.net>
2026-04-05 14:37:09 +02:00
..
actions feat: support timezone in scheduled workflows (#11851) 2026-04-04 18:23:06 +02:00
agit chore: fix typos throughout the codebase (#10753) 2026-01-26 22:57:33 +01:00
asymkey chore: do not clobber ~/.ssh/authorized_keys in certain tests (#10163) 2025-11-19 16:14:16 +01:00
attachment fix: check that attachments belong to correct resource 2026-03-06 11:21:07 -07:00
auth chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
authz feat: read, create, & delete repo-specific access tokens via API (#11504) 2026-03-07 21:55:08 +01:00
automerge chore: add integration testing 2026-03-06 11:21:07 -07:00
context chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
contexttest feat: add more filters to actions run and tasks api (#11584) 2026-03-10 01:20:00 +01:00
convert perf: bulk load resolvers & reactions on pull request comments (#11988) 2026-04-05 14:37:09 +02:00
cron chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
doctor chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
externalaccount chore(cleanup): replaces unnecessary calls to formatting functions by non-formatting equivalents (#7994) 2025-05-29 17:34:29 +02:00
f3 chore: update gof3/v3 v3.11.15 (#10673) 2026-01-13 16:59:56 +01:00
federation feat(activitypub): use structure @PreferredUsername@host.tld:port for actors (#9254) 2026-01-30 23:45:11 +01:00
feed chore: fix typos throughout the codebase (#10753) 2026-01-26 22:57:33 +01:00
forgejo chore: move all test blank imports in a single package (#10662) 2026-01-02 05:32:32 +01:00
forms chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
gitdiff chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
indexer fix(issue-search): delete issue from indexer on DeleteIssue (#11585) 2026-03-09 18:51:18 +01:00
issue chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
lfs chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
mailer chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
markup chore: remove branding from context imports (#9628) 2025-10-11 01:52:51 +02:00
migrations chore(i18n): migrate strings to json, unhardcode one, improve plurals (#11879) 2026-04-03 14:11:48 +02:00
mirror fix: store pull mirror creds encrypted with keying (#11909) 2026-04-04 13:53:22 +02:00
moderation chore: move all test blank imports in a single package (#10662) 2026-01-02 05:32:32 +01:00
notify fix(issue-search): delete issue from indexer on DeleteIssue (#11585) 2026-03-09 18:51:18 +01:00
org fix: add missing deleting beans for organizations (#11699) 2026-03-17 09:11:52 +01:00
packages chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
pull chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
redirect chore: move all test blank imports in a single package (#10662) 2026-01-02 05:32:32 +01:00
release fix: don't trip deleting attachment with missing permission error (#11642) 2026-03-12 20:29:10 +01:00
remote chore: fix typos throughout the codebase (#10753) 2026-01-26 22:57:33 +01:00
repository fix: store pull mirror creds encrypted with keying (#11909) 2026-04-04 13:53:22 +02:00
secrets feat: allow renaming and replacing secrets (#11732) 2026-03-23 03:30:02 +01:00
shared/automerge fix: suppress false-positive error log when PR is already in the automerge queue (#9784) 2025-10-21 08:19:33 +02:00
stats chore: fix typos throughout the codebase (#10753) 2026-01-26 22:57:33 +01:00
task ci: detect and prevent empty case statements in Go code (#11593) 2026-03-10 02:50:28 +01:00
uinotification chore: branding import path (#7337) 2025-03-27 19:40:14 +00:00
user refactor: replace ActionRunnerToken.OwnerID & RepoID with optional.Option[int64] (#11601) 2026-03-10 03:19:16 +01:00
webhook chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00
wiki chore: add modernizer linter (#11936) 2026-04-02 03:29:37 +02:00