|
- class Projects::AcceptJoinService < ApplicationService
- attr_accessor :applied_project, :owner
- attr_reader :user, :project
-
- def initialize(user, applied_project)
- @user = user
- @project = applied_project.project
- @applied_project = applied_project
- end
-
- def call
- Rails.logger.info("###### Project accept_join_service begin ######")
- ActiveRecord::Base.transaction do
- validate!
- update_apply
- operate_project_member
- send_apply_message
- end
-
- Rails.logger.info("##### Project accept_join_service end ######")
-
-
- return @applied_project
- end
-
- private
- def permission
- case @applied_project.role
- when 'manager'
- 'admin'
- when 'developer'
- 'write'
- when 'reporter'
- 'read'
- else
- 'read'
- end
- end
-
- def validate!
- raise Error, '该申请已经被接受' if @applied_project.accepted?
- raise Error, '该申请不存在' unless @applied_project.present?
- raise Error, '未拥有接受申请权限' unless is_permit_operator
- end
-
- def is_permit_operator
- return @user.admin? || @project.manager?(@user)
- end
-
- def update_apply
- @applied_project.update!(status: 'accepted')
- end
-
- def operate_project_member
- Projects::AddMemberInteractor.call(@project.owner, @project, @applied_project.user, permission)
- SendTemplateMessageJob.perform_later('ProjectJoined', @user.id, @applied_project.user_id, @project.id) if Site.has_notice_menu?
- SendTemplateMessageJob.perform_later('ProjectMemberJoined', @user.id, @applied_project.user_id, @project.id) if Site.has_notice_menu?
- end
-
- def send_apply_message
- SendJoinProjectAppliedMessageJob.perform_now(@applied_project, @user, 'successed')
- end
- end
|