summaryrefslogtreecommitdiff
path: root/app/models/users_project.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/users_project.rb')
-rw-r--r--app/models/users_project.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/app/models/users_project.rb b/app/models/users_project.rb
index e8810f56def..6495bed4e61 100644
--- a/app/models/users_project.rb
+++ b/app/models/users_project.rb
@@ -37,6 +37,10 @@ class UsersProject < ActiveRecord::Base
scope :in_projects, ->(projects) { where(project_id: projects.map { |p| p.id }) }
scope :with_user, ->(user) { where(user_id: user.id) }
+ after_create :post_create_hook
+ after_update :post_update_hook
+ after_destroy :post_destroy_hook
+
class << self
# Add users to project teams with passed access option
@@ -114,4 +118,37 @@ class UsersProject < ActiveRecord::Base
def owner?
project.owner == user
end
+
+ def post_create_hook
+ Event.create(
+ project_id: self.project.id,
+ action: Event::JOINED,
+ author_id: self.user.id
+ )
+
+ notification_service.new_team_member(self)
+ system_hook_service.execute_hooks_for(self, :create)
+ end
+
+ def post_update_hook
+ notification_service.update_team_member(self) if self.project_access_changed?
+ end
+
+ def post_destroy_hook
+ Event.create(
+ project_id: self.project.id,
+ action: Event::LEFT,
+ author_id: self.user.id
+ )
+
+ system_hook_service.execute_hooks_for(self, :destroy)
+ end
+
+ def notification_service
+ NotificationService.new
+ end
+
+ def system_hook_service
+ SystemHooksService.new
+ end
end