Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/member.rb2
-rw-r--r--app/models/members/members/member_approval.rb17
-rw-r--r--app/models/project.rb2
-rw-r--r--app/models/user.rb3
4 files changed, 24 insertions, 0 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index cd977969098..1771c92d5cd 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -31,6 +31,8 @@ class Member < ApplicationRecord
delegate :name, :username, :email, :last_activity_on, to: :user, prefix: true
+ has_many :member_approvals, inverse_of: :member, class_name: 'Members::MemberApproval'
+
validates :expires_at, allow_blank: true, future_date: true
validates :user, presence: true, unless: :invite?
validates :source, presence: true
diff --git a/app/models/members/members/member_approval.rb b/app/models/members/members/member_approval.rb
new file mode 100644
index 00000000000..60318f9d4e5
--- /dev/null
+++ b/app/models/members/members/member_approval.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module Members
+ class MemberApproval < ApplicationRecord
+ enum status: { pending: 0, approved: 1, denied: 2 }
+
+ belongs_to :member
+ belongs_to :member_namespace, class_name: 'Namespace'
+ belongs_to :requested_by, inverse_of: :requested_member_approvals, class_name: 'User',
+ optional: true
+ belongs_to :reviewed_by, inverse_of: :reviewed_member_approvals, class_name: 'User',
+ optional: true
+
+ validates :new_access_level, presence: true
+ validates :old_access_level, presence: true
+ end
+end
diff --git a/app/models/project.rb b/app/models/project.rb
index 8f82a947ba6..8ad463f1511 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -347,6 +347,8 @@ class Project < ApplicationRecord
primary_key: :project_namespace_id, foreign_key: :member_namespace_id, inverse_of: :project, class_name: 'ProjectMember'
has_many :members_and_requesters, as: :source, class_name: 'ProjectMember'
+ has_many :member_approvals, through: :members_and_requesters
+
has_many :namespace_members_and_requesters, -> { unscope(where: %i[source_id source_type]) },
primary_key: :project_namespace_id, foreign_key: :member_namespace_id, inverse_of: :project,
class_name: 'ProjectMember'
diff --git a/app/models/user.rb b/app/models/user.rb
index c9873975cc9..dca6570661e 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -299,6 +299,9 @@ class User < MainClusterwide::ApplicationRecord
has_many :achievements, through: :user_achievements, class_name: 'Achievements::Achievement', inverse_of: :users
has_many :vscode_settings, class_name: 'VsCode::Settings::VsCodeSetting', inverse_of: :user
+ has_many :requested_member_approvals, class_name: 'Members::MemberApproval', foreign_key: 'requested_by_id'
+ has_many :reviewed_member_approvals, class_name: 'Members::MemberApproval', foreign_key: 'reviewed_by_id'
+
#
# Validations
#