You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gitea/models/issues
Jason Song beb71f5ef6
Include public repos in doer's dashboard for issue search (#28304)
It will fix #28268 .

<img width="1313" alt="image"
src="https://github.com/go-gitea/gitea/assets/9418365/cb1e07d5-7a12-4691-a054-8278ba255bfc">

<img width="1318" alt="image"
src="https://github.com/go-gitea/gitea/assets/9418365/4fd60820-97f1-4c2c-a233-d3671a5039e9">

## ⚠️ BREAKING ⚠️

But need to give up some features:

<img width="1312" alt="image"
src="https://github.com/go-gitea/gitea/assets/9418365/281c0d51-0e7d-473f-bbed-216e2f645610">

However, such abandonment may fix #28055 .

## Backgroud

When the user switches the dashboard context to an org, it means they
want to search issues in the repos that belong to the org. However, when
they switch to themselves, it means all repos they can access because
they may have created an issue in a public repo that they don't own.

<img width="286" alt="image"
src="https://github.com/go-gitea/gitea/assets/9418365/182dcd5b-1c20-4725-93af-96e8dfae5b97">

It's a confusing design. Think about this: What does "In your
repositories" mean when the user switches to an org? Repos belong to the
user or the org?

Whatever, it has been broken by #26012 and its following PRs. After the
PR, it searches for issues in repos that the dashboard context user owns
or has been explicitly granted access to, so it causes #28268.

## How to fix it

It's not really difficult to fix it. Just extend the repo scope to
search issues when the dashboard context user is the doer. Since the
user may create issues or be mentioned in any public repo, we can just
set `AllPublic` to true, which is already supported by indexers. The DB
condition will also support it in this PR.

But the real difficulty is how to count the search results grouped by
repos. It's something like "search issues with this keyword and those
filters, and return the total number and the top results. **Then, group
all of them by repo and return the counts of each group.**"

<img width="314" alt="image"
src="https://github.com/go-gitea/gitea/assets/9418365/5206eb20-f8f5-49b9-b45a-1be2fcf679f4">

Before #26012, it was being done in the DB, but it caused the results to
be incomplete (see the description of #26012).

And to keep this, #26012 implement it in an inefficient way, just count
the issues by repo one by one, so it cannot work when `AllPublic` is
true because it's almost impossible to do this for all public repos.


1bfcdeef4c/modules/indexer/issues/indexer.go (L318-L338)

## Give up unnecessary features

We may can resovle `TODO: use "group by" of the indexer engines to
implement it`, I'm sure it can be done with Elasticsearch, but IIRC,
Bleve and Meilisearch don't support "group by".

And the real question is, does it worth it? Why should we need to know
the counts grouped by repos?

Let me show you my search dashboard on gitea.com.

<img width="1304" alt="image"
src="https://github.com/go-gitea/gitea/assets/9418365/2bca2d46-6c71-4de1-94cb-0c9af27c62ff">

I never think the long repo list helps anything.

And if we agree to abandon it, things will be much easier. That is this
PR.

## TODO

I know it's important to filter by repos when searching issues. However,
it shouldn't be the way we have it now. It could be implemented like
this.

<img width="1316" alt="image"
src="https://github.com/go-gitea/gitea/assets/9418365/99ee5f21-cbb5-4dfe-914d-cb796cb79fbe">

The indexers support it well now, but it requires some frontend work,
which I'm not good at. So, I think someone could help do that in another
PR and merge this one to fix the bug first.

Or please block this PR and help to complete it.

Finally, "Switch dashboard context" is also a design that needs
improvement. In my opinion, it can be accomplished by adding filtering
conditions instead of "switching".
1 year ago
..
assignees.go Make more functions use ctx instead of db.DefaultContext (#24068) 2 years ago
assignees_test.go Even more `db.DefaultContext` refactor (#27352) 1 year ago
comment.go Fix comment permissions (#28213) 1 year ago
comment_code.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
comment_list.go Add logs for data broken of comment review (#27326) 1 year ago
comment_test.go More `db.DefaultContext` refactor (#27265) 1 year ago
content_history.go Fix comment permissions (#28213) 1 year ago
content_history_test.go Fix comment permissions (#28213) 1 year ago
dependency.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
dependency_test.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
issue.go Display issue task list on project cards (#27865) 1 year ago
issue_index.go Another round of `db.DefaultContext` refactor (#27103) 1 year ago
issue_label.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
issue_label_test.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
issue_list.go Add context parameter to some database functions (#26055) 2 years ago
issue_list_test.go Add context parameter to some database functions (#26055) 2 years ago
issue_lock.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
issue_project.go Clean some functions about project issue (#27705) 1 year ago
issue_search.go Include public repos in doer's dashboard for issue search (#28304) 1 year ago
issue_stats.go Another round of `db.DefaultContext` refactor (#27103) 1 year ago
issue_test.go Show total TrackedTime on issue/pull/milestone lists (#26672) 1 year ago
issue_update.go Don't use subselect in `DeleteIssuesByRepoID` (#27332) 1 year ago
issue_user.go Add index to `issue_user.issue_id` (#27154) 1 year ago
issue_user_test.go Fix bug with sqlite load read (#26305) 2 years ago
issue_watch.go Even more `db.DefaultContext` refactor (#27352) 1 year ago
issue_watch_test.go Next round of `db.DefaultContext` refactor (#27089) 1 year ago
issue_xref.go More `db.DefaultContext` refactor (#27265) 1 year ago
issue_xref_test.go Replace 'userxx' with 'orgxx' in all test files when the user type is org (#27052) 1 year ago
label.go Next round of `db.DefaultContext` refactor (#27089) 1 year ago
label_test.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
main_test.go make writing main test easier (#27270) 1 year ago
milestone.go Next round of `db.DefaultContext` refactor (#27089) 1 year ago
milestone_list.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
milestone_test.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
pull.go Replace -1 with GhostUserID (#27703) 1 year ago
pull_list.go More refactoring of `db.DefaultContext` (#27083) 1 year ago
pull_test.go Penultimate round of `db.DefaultContext` refactor (#27414) 1 year ago
reaction.go Another round of `db.DefaultContext` refactor (#27103) 1 year ago
reaction_test.go Another round of `db.DefaultContext` refactor (#27103) 1 year ago
review.go Fix 500 when deleting a dismissed review (#27903) 1 year ago
review_list.go Another round of `db.DefaultContext` refactor (#27103) 1 year ago
review_test.go Fix 500 when deleting a dismissed review (#27903) 1 year ago
stopwatch.go Next round of `db.DefaultContext` refactor (#27089) 1 year ago
stopwatch_test.go Next round of `db.DefaultContext` refactor (#27089) 1 year ago
tracked_time.go Show total TrackedTime on issue/pull/milestone lists (#26672) 1 year ago
tracked_time_test.go Show total TrackedTime on issue/pull/milestone lists (#26672) 1 year ago