Files
old-holivud2/app/models/project_membership.rb
2020-05-31 22:38:19 +02:00

48 lines
1.3 KiB
Ruby

class ProjectMembership < ApplicationRecord
belongs_to :project
belongs_to :user
validates :user_id, uniqueness: { scope: :project_id, message: "already belongs to this Project" }
validate :account_manager_is_prohibited
scope :with_account_auth, -> (account) { joins(user: :account_auths).where(account_auths: { account_id: account }) }
scope :order_by_user_role_and_user_email, -> (account) { with_account_auth(account).order("account_auths.role DESC, users.email") }
attr_accessor :user_email
def new_user?
@user_is_new
end
def save_and_update_account_membership
ApplicationRecord.transaction do
if User.exists?(email: user_email)
@user_is_new = false
self.user = User.find_by(email: user_email)
else
@user_is_new = true
self.user = Oath::Services::SignUp.new(email: user_email, password: SecureRandom.hex).perform
end
account_auth = user.account_auths.find_or_initialize_by(account: project.account)
if !(user.save && account_auth.save && save)
raise ActiveRecord::Rollback
return false
end
return true
end
end
private
def account_manager_is_prohibited
return if project.nil?
if user.account_manager?(project.account)
errors.add(:user, "is already an account manager")
end
end
end