summaryrefslogtreecommitdiff
path: root/app/models/user.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-02-18 10:34:06 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-02-18 10:34:06 +0000
commit859a6fb938bb9ee2a317c46dfa4fcc1af49608f0 (patch)
treed7f2700abe6b4ffcb2dcfc80631b2d87d0609239 /app/models/user.rb
parent446d496a6d000c73a304be52587cd9bbc7493136 (diff)
downloadgitlab-ce-859a6fb938bb9ee2a317c46dfa4fcc1af49608f0.tar.gz
Add latest changes from gitlab-org/gitlab@13-9-stable-eev13.9.0-rc42
Diffstat (limited to 'app/models/user.rb')
-rw-r--r--app/models/user.rb34
1 files changed, 32 insertions, 2 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index b4ec6064ff8..1f8b680c7e5 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -116,6 +116,13 @@ class User < ApplicationRecord
has_one :user_synced_attributes_metadata, autosave: true
has_one :aws_role, class_name: 'Aws::Role'
+ # Followers
+ has_many :followed_users, foreign_key: :follower_id, class_name: 'Users::UserFollowUser'
+ has_many :followees, through: :followed_users
+
+ has_many :following_users, foreign_key: :followee_id, class_name: 'Users::UserFollowUser'
+ has_many :followers, through: :following_users
+
# Groups
has_many :members
has_many :group_members, -> { where(requested_at: nil).where("access_level >= ?", Gitlab::Access::GUEST) }, source: 'GroupMember'
@@ -960,8 +967,8 @@ class User < ApplicationRecord
end
# rubocop: disable CodeReuse/ServiceClass
- def refresh_authorized_projects
- Users::RefreshAuthorizedProjectsService.new(self).execute
+ def refresh_authorized_projects(source: nil)
+ Users::RefreshAuthorizedProjectsService.new(self, source: source).execute
end
# rubocop: enable CodeReuse/ServiceClass
@@ -1442,6 +1449,29 @@ class User < ApplicationRecord
end
end
+ def following?(user)
+ self.followees.exists?(user.id)
+ end
+
+ def follow(user)
+ return false if self.id == user.id
+
+ begin
+ followee = Users::UserFollowUser.create(follower_id: self.id, followee_id: user.id)
+ self.followees.reset if followee.persisted?
+ rescue ActiveRecord::RecordNotUnique
+ false
+ end
+ end
+
+ def unfollow(user)
+ if Users::UserFollowUser.where(follower_id: self.id, followee_id: user.id).delete_all > 0
+ self.followees.reset
+ else
+ false
+ end
+ end
+
def manageable_namespaces
@manageable_namespaces ||= [namespace] + manageable_groups
end