diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/member.rb | 2 | ||||
-rw-r--r-- | app/models/members/members/member_approval.rb | 17 | ||||
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/models/user.rb | 3 |
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 # |