Age | Commit message (Collapse) | Author |
|
* Meld the following disparate endpoints:
* `/projects/:id/events`
* `/events`
* `/users/:id/events`
+ Add result filtering to the above endpoints:
* action
* target_type
* before and after dates
|
|
Signed-off-by: Rémy Coutable <remy@rymai.me>
|
|
And use it in the API.
|
|
Now it is possible to combine the :non_public parameter. This might be useful
when a user wants to know the trending projects they are member of.
|
|
Instead of applying WHERE on a UNION, apply the WHERE on each of the seperate
SELECT statements, and do UNION on that.
Local tests with about 2_000_000 projects:
- 1_500_000 private projects
- 40_000 internal projects
- 400_000 public projects
For the API endpoint `/api/v4/projects?visibility=private` the slowest query was:
```sql
SELECT "projects".*
FROM "projects"
WHERE ...
```
The original query took 1073.8ms.
The query refactored to UNION of SELECT/WHERE took 2.3ms.
The original query was:
```sql
SELECT "projects".*
FROM "projects"
WHERE "projects"."pending_delete" = $1
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 23
UNION SELECT "projects"."id"
FROM "projects"
WHERE "projects"."visibility_level" IN (20,
10)))
AND "projects"."visibility_level" = $2
AND "projects"."archived" = $3
ORDER BY "projects"."created_at" DESC
LIMIT 20
OFFSET 0 [["pending_delete", "f"],
["visibility_level", 0],
["archived", "f"]]
```
The refactored query:
```sql
SELECT "projects".*
FROM "projects"
WHERE "projects"."pending_delete" = $1
AND (projects.id IN
(SELECT "projects"."id"
FROM "projects"
INNER JOIN "project_authorizations" ON "projects"."id" = "project_authorizations"."project_id"
WHERE "projects"."pending_delete" = 'f'
AND "project_authorizations"."user_id" = 23
AND "projects"."visibility_level" = 0
AND "projects"."archived" = 'f'
UNION SELECT "projects"."id"
FROM "projects"
WHERE "projects"."visibility_level" IN (20,
10)
AND "projects"."visibility_level" = 0
AND "projects"."archived" = 'f'))
ORDER BY "projects"."created_at" DESC
LIMIT 20
OFFSET 0 [["pending_delete", "f"]]
```
|
|
The `starred` parameter couldn't be used in combination with `trending` or
`non_public`. But this is changed now.
|
|
|
|
Use GroupsFinder to find subgroups the user has access to
See merge request !2096
|
|
Refactor snippets finder & dont return internal snippets for external users
See merge request !2094
|
|
|
|
|
|
|
|
|
|
|
|
This reverts commit 34127cb13ad72f65a24bdc8fc051363d3edd77cb.
|
|
|
|
|
|
|
|
unnecessary) from condition. Added spec just in case.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Fix inappropriate evaluation(casecmp) to regex
- Fix missed boolean conversion
- Improve spec
|
|
|
|
|
|
|
|
- username to user_id
- Drop duration
- Resolve comments
- Add Changelog
- Edit docs
|
|
|
|
- Expand PipelinesFinder functions
|
|
|
|
|
|
|
|
Extended ProjectFinder in order to handle the following options:
- current_user - which user use
- project_ids_relation: int[] - project ids to use
- params:
- trending: boolean
- non_public: boolean
- starred: boolean
- sort: string
- visibility_level: int
- tags: string[]
- personal: boolean
- search: string
- non_archived: boolean
GroupProjectsFinder now inherits from ProjectsFinder.
Changed the code in order to use the new available options.
|
|
|
|
|
|
|
|
The MergeRequestsFinder uses the milestone_title instead of the
milestone_id
|
|
Prevent private group disclosure via parent_id
See merge request !2077
|
|
Optimize labels finder query when searching for a project with a group
|
|
This reverts merge request !10076
|
|
|
|
|
|
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
|
|
'origin/personal_access_token_api_and_impersonation_token'
|
|
|
|
|