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/concerns/has_user_type.rb')
-rw-r--r--app/models/concerns/has_user_type.rb45
1 files changed, 45 insertions, 0 deletions
diff --git a/app/models/concerns/has_user_type.rb b/app/models/concerns/has_user_type.rb
new file mode 100644
index 00000000000..8a238dc736c
--- /dev/null
+++ b/app/models/concerns/has_user_type.rb
@@ -0,0 +1,45 @@
+# frozen_string_literal: true
+
+module HasUserType
+ extend ActiveSupport::Concern
+
+ USER_TYPES = {
+ human: nil,
+ support_bot: 1,
+ alert_bot: 2,
+ visual_review_bot: 3,
+ service_user: 4,
+ ghost: 5,
+ project_bot: 6,
+ migration_bot: 7
+ }.with_indifferent_access.freeze
+
+ BOT_USER_TYPES = %w[alert_bot project_bot support_bot visual_review_bot migration_bot].freeze
+ NON_INTERNAL_USER_TYPES = %w[human project_bot service_user].freeze
+ INTERNAL_USER_TYPES = (USER_TYPES.keys - NON_INTERNAL_USER_TYPES).freeze
+
+ included do
+ scope :humans, -> { where(user_type: :human) }
+ scope :bots, -> { where(user_type: BOT_USER_TYPES) }
+ scope :bots_without_project_bot, -> { where(user_type: BOT_USER_TYPES - ['project_bot']) }
+ scope :non_internal, -> { humans.or(where(user_type: NON_INTERNAL_USER_TYPES)) }
+ scope :without_ghosts, -> { humans.or(where.not(user_type: :ghost)) }
+ scope :without_project_bot, -> { humans.or(where.not(user_type: :project_bot)) }
+
+ enum user_type: USER_TYPES
+
+ def human?
+ super || user_type.nil?
+ end
+ end
+
+ def bot?
+ BOT_USER_TYPES.include?(user_type)
+ end
+
+ # The explicit check for project_bot will be removed with Bot Categorization
+ # Ref: https://gitlab.com/gitlab-org/gitlab/-/issues/213945
+ def internal?
+ ghost? || (bot? && !project_bot?)
+ end
+end