Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Fix API::Namespaces to accept namepaces with dotsif-52811-fix_namespaces_api_routing | Imre Farkas | 2018-11-28 | 1 | -1/+1 |
| | | | | | It also renames the API::PROJECT_ENDPOINT_REQUIREMENTS constant to API::NAMESPACE_OR_PROJECT_REQUIREMENTS | ||||
* | Enable frozen string in lib/api and lib/backup | gfyoung | 2018-09-29 | 1 | -0/+2 |
| | | | | | | | | | | Partially addresses #47424. Had to make changes to spec files because stubbing methods on frozen objects is a mess in RSpec and leads to failures: https://github.com/rspec/rspec-mocks/issues/1190 | ||||
* | Disable existing offenses for the CodeReuse cops | Yorick Peterse | 2018-09-11 | 1 | -0/+12 |
| | | | | | This whitelists all existing offenses for the various CodeReuse cops, of which most are triggered by the CodeReuse/ActiveRecord cop. | ||||
* | Improve error message when adding invalid user to a project | Jacopo | 2018-07-30 | 1 | -1/+4 |
| | |||||
* | Resolve "API endpoint that returns all members, including the inherited ↵ | 🙈 jacopo beschi 🙉 | 2018-07-25 | 1 | -0/+17 |
| | | | | membership through ancestor group" | ||||
* | Improve Member servicesrc/reduce-delta-with-ce-in-controllers-ce | Rémy Coutable | 2018-02-27 | 1 | -6/+4 |
| | | | | Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Remove explicit audit event log in MembershipActions | Rémy Coutable | 2018-02-27 | 1 | -6/+12 |
| | | | | | | | | | Move it to Members::ApproveAccessRequestService. Also, note that there was a double audit event log for access request destruction. Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Remove N+1 queries with /projects/:project_id/{access_requests,members} API ↵sh-fix-project-members-api-perf | Stan Hu | 2018-01-30 | 1 | -6/+7 |
| | | | | | | | | | | | endpoints We can simplify the code quite a bit and improve performance by using grape-entity merge fields: https://github.com/ruby-grape/grape-entity/tree/v0.6.0#merge-fields Relates to #42030 | ||||
* | Fix error on empty query for Members API | Mark Fletcher | 2018-01-21 | 1 | -1/+1 |
| | |||||
* | Backport a change made in EEce-4135-remove-ee-specific-code-from-post-api-v4-projects-id-members | Rémy Coutable | 2017-12-21 | 1 | -1/+3 |
| | | | | Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | API: Use defined project requirementsrs-api-use-project-requirements | Robert Schilling | 2017-08-31 | 1 | -1/+1 |
| | |||||
* | Conditionally destroy a ressource | Robert Schilling | 2017-08-28 | 1 | -4/+3 |
| | |||||
* | API: Respect the 'If-Unmodified-Since' for delete endpoints | Robert Schilling | 2017-08-28 | 1 | -1/+2 |
| | |||||
* | Update grape gemdz-update-grape | Dmitriy Zaporozhets | 2017-07-20 | 1 | -0/+1 |
| | | | | | | | | New version of the gem returns 200 status code on delete with content instead of 204 so we explicitly set status code to keep existing behavior Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | ||||
* | Add `requirements: { id: %r{[^/]+} }` for all projects and groups namespaced ↵ | Rémy Coutable | 2017-03-16 | 1 | -1/+1 |
| | | | | | | API routes Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Return 204 for delete endpoints | Robert Schilling | 2017-02-28 | 1 | -17/+3 |
| | |||||
* | API: Return 400 for all validation erros in the mebers APIunified-member-api-response | Robert Schilling | 2017-02-24 | 1 | -7/+0 |
| | |||||
* | Use grape to validate parameters in the members APIapi-remove-attributes_for_keys | Robert Schilling | 2017-02-23 | 1 | -4/+3 |
| | |||||
* | Add member: Always return 409 when a member exists | Jarka Kadlecova | 2017-02-10 | 1 | -10/+3 |
| | |||||
* | Use the pagination helper in the APIuse-pagination-helper | Robert Schilling | 2016-12-04 | 1 | -2/+4 |
| | |||||
* | Use declared_params helper in APIgrapify-declared-params | Robert Schilling | 2016-11-14 | 1 | -1/+1 |
| | |||||
* | Use Grape DSL to document methods and their paramsrc-use-grape-dsl-to-document-members-api | Rémy Coutable | 2016-10-05 | 1 | -55/+41 |
| | | | | Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Remove useless code now that Member#add_user handles itrc-improve-members-destroy-service | Rémy Coutable | 2016-10-03 | 1 | -8/+0 |
| | | | | Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Improve Members::DestroyService | Rémy Coutable | 2016-10-03 | 1 | -1/+9 |
| | | | | Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Allow Member.add_user to handle access requesters | Rémy Coutable | 2016-09-28 | 1 | -15/+2 |
| | | | | | | | | | | | | | | | | | | | | | Changes include: - Ensure Member.add_user is not called directly when not necessary - New GroupMember.add_users_to_group to have the same abstraction level as for Project - Refactor Member.add_user to take a source instead of an array of members - Fix Rubocop offenses - Always use Project#add_user instead of project.team.add_user - Factorize users addition as members in Member.add_users_to_source - Make access_level a keyword argument in GroupMember.add_users_to_group and ProjectMember.add_users_to_projects - Destroy any requester before adding them as a member - Improve the way we handle access requesters in Member.add_user Instead of removing the requester and creating a new member, we now simply accepts their access request. This way, they will receive a "access request granted" email. - Fix error that was previously silently ignored - Stop raising when access level is invalid in Member, let Rails validation do their work Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Ensure invitees are not returned in Members API | Rémy Coutable | 2016-09-16 | 1 | -4/+4 |
| | | | | Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Add expiration date to group memberships | Sean McGivern | 2016-08-18 | 1 | -3/+5 |
| | |||||
* | Merge branch 'master' into expiration-date-on-memberships | Sean McGivern | 2016-08-18 | 1 | -1/+2 |
| | |||||
* | Improve the performance of the GET /:sources/:id/{access_requests,members} ↵ | Rémy Coutable | 2016-08-10 | 1 | -3/+3 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | API endpoints The performance was greatly improved by removing two N+1 queries issues for each endpoint. For comparison: 1. `GET /projects/:id/members` With two N+1 queries issues (one was already fxed in the following snippet): ``` ProjectMember Load (0.2ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND "members"."requested_at" IS NULL ORDER BY "members"."id" DESC [["source_type", "Project"], ["source_id", 1], ["source_type", "Project"]] User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (5, 22, 16, 13) ORDER BY "users"."id" DESC ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations" ProjectMember Load (0.3ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND "members"."requested_at" IS NULL AND "members"."user_id" = $4 ORDER BY "members"."id" DESC LIMIT 1 [["source_type", "Project"], ["source_id", 1], ["source_type", "Project"], ["user_id", 5]] ProjectMember Load (0.3ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND "members"."requested_at" IS NULL AND "members"."user_id" = $4 ORDER BY "members"."id" DESC LIMIT 1 [["source_type", "Project"], ["source_id", 1], ["source_type", "Project"], ["user_id", 22]] ProjectMember Load (0.3ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND "members"."requested_at" IS NULL AND "members"."user_id" = $4 ORDER BY "members"."id" DESC LIMIT 1 [["source_type", "Project"], ["source_id", 1], ["source_type", "Project"], ["user_id", 16]] ProjectMember Load (0.3ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND "members"."requested_at" IS NULL AND "members"."user_id" = $4 ORDER BY "members"."id" DESC LIMIT 1 [["source_type", "Project"], ["source_id", 1], ["source_type", "Project"], ["user_id", 13]] ``` Without the N+1 queries issues: ``` ProjectMember Load (0.3ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND "members"."requested_at" IS NULL ORDER BY "members"."id" DESC LIMIT 20 OFFSET 0 [["source_type", "Project"], ["source_id", 1], ["source_type", "Project"]] User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (5, 22, 16, 13) ORDER BY "users"."id" DESC ``` 2. `GET /projects/:id/access_requests` With two N+1 queries issues: ``` ProjectMember Load (0.3ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND ("members"."requested_at" IS NOT NULL) ORDER BY "members"."id" DESC [["source_type", "Project"], ["source_id", 8], ["source_type", "Project"]] User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" DESC LIMIT 1 [["id", 24]] User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" DESC LIMIT 1 [["id", 23]] ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations" ProjectMember Load (0.1ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND ("members"."requested_at" IS NOT NULL) AND "members"."user_id" = $4 ORDER BY "members"."id" DESC LIMIT 1 [["source_type", "Project"], ["source_id", 8], ["source_type", "Project"], ["user_id", 24]] ProjectMember Load (0.2ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND ("members"."requested_at" IS NOT NULL) AND "members"."user_id" = $4 ORDER BY "members"."id" DESC LIMIT 1 [["source_type", "Project"], ["source_id", 8], ["source_type", "Project"], ["user_id", 23]] ``` Without the N+1 queries issues: ``` ProjectMember Load (0.3ms) SELECT "members".* FROM "members" WHERE "members"."source_type" = $1 AND "members"."type" IN ('ProjectMember') AND "members"."source_id" = $2 AND "members"."source_type" = $3 AND "members"."type" IN ('ProjectMember') AND ("members"."requested_at" IS NOT NULL) ORDER BY "members"."id" DESC LIMIT 20 OFFSET 0 [["source_type", "Project"], ["source_id", 8], ["source_type", "Project"]] User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (24, 23) ORDER BY "users"."id" DESC ``` Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | Restore back-compatibility for current members API endpoints | Rémy Coutable | 2016-08-10 | 1 | -7/+38 |
| | | | | Signed-off-by: Rémy Coutable <remy@rymai.me> | ||||
* | New AccessRequests API endpoints for Group & Project | Rémy Coutable | 2016-08-10 | 1 | -0/+124 |
Also, mutualize AccessRequests and Members endpoints for Group & Project. New API documentation for the AccessRequests endpoints. Signed-off-by: Rémy Coutable <remy@rymai.me> |