Add ApprovalRule model
What does this MR do?
See https://gitlab.com/gitlab-org/gitlab-ee/issues/8647 for overall description.
Add several new tables to support #1979 (closed)
- approval_merge_request_rules
- approval_project_rules
- approval_merge_request_rules_users (HABTM to User)
- approval_merge_request_rules_groups (HABTM to Group)
- approval_project_rules_users (HABTM to User)
- approval_project_rules_groups (HABTM to Group)
- approval_merge_request_rules_approvals (HABTM for persisting which approval rules was satisfied by an approval)
- approval_merge_request_rules_sources (record MR rule's project rule source)
The associations are:
-
MergeRequest
has_manyApprovalMergeRequestRule
-
Project
has manyApprovalProjectRule
-
ApprovalMergeRequestRule
has_and_belongs_to_manyUser
-
ApprovalMergeRequestRule
has_and_belongs_to_manyGroup
-
ApprovalMergeRequestRule
has_oneApprovalProjectRule
-
ApprovalProjectRule
has_and_belongs_to_manyUser
-
ApprovalProjectRule
has_and_belongs_to_manyGroup
-
ApprovalMergeRequestRule
has_and_belongs_to_manyApproval
Query samples
#approvers
SELECT "users".* FROM (
SELECT "users".* FROM "users"
INNER JOIN "approval_merge_request_rules_users"
ON "users"."id" = "approval_merge_request_rules_users"."user_id"
WHERE "approval_merge_request_rules_users"."approval_merge_request_rule_id" = 1
UNION
SELECT "users".* FROM "users" INNER JOIN "members"
ON "members"."user_id" = "users"."id" AND "members"."type" IN ('GroupMember') AND "members"."source_type" = 'Namespace' AND "members"."requested_at" IS NULL
WHERE "members"."source_id" IN (
SELECT "namespaces"."id" FROM "namespaces"
INNER JOIN "approval_merge_request_rules_groups"
ON "namespaces"."id" = "approval_merge_request_rules_groups"."group_id"
WHERE "namespaces"."type" IN ('Group') AND "approval_merge_request_rules_groups"."approval_merge_request_rule_id" = 1
)
) users WHERE ("users"."id" != 1)
What are the relevant issue numbers?
Does this MR meet the acceptance criteria?
-
Tests added for this feature/bug -
Conforms to the code review guidelines -
Conforms to the merge request performance guidelines -
Conforms to the style guides -
Conforms to the database guides -
Link to e2e tests MR added if this MR has Requires e2e tests label. See the Test Planning Process. -
EE specific content should be in the top level /ee
folder -
For a paid feature, have we considered GitLab.com plans, how it works for groups, and is there a design for promoting it to users who aren't on the correct plan?
Edited by Mark Chao