You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
educoder/app/services/users/apply_trail_service.rb

56 lines
1.5 KiB

6 years ago
class Users::ApplyTrailService < ApplicationService
Error = Class.new(StandardError)
attr_reader :user, :remote_ip, :params
def initialize(user, params)
@user = user
@remote_ip = params.delete(:remote_ip)
@params = params
end
def call
Users::ApplyTrailForm.new(params.merge(user: user)).validate!
ActiveRecord::Base.transaction do
bind_user_phone! unless user.phone_binded?
apply = ApplyAction.find_or_initialize_by(user_id: user.id, container_type: 'TrialAuthorization', status: 0)
apply.assign_attributes(ip_addr: remote_ip, apply_reason: params[:reason]) if apply.new_record?
# 自动授权
if auto_authorization_school_student?
user.update!(certification: 1)
apply.status = 1
else
send_trial_apply_notify!
end
apply.save!
end
user
end
private
def bind_user_phone!
code = VerificationCode.where(phone: params[:phone], code: params[:code], code_type: 4).last
raise Error, '无效的验证码' if code.blank? || !code.effective?
user.update!(phone: params[:phone])
end
def auto_authorization_school_student?
user.user_extension&.student? && School.exists?(auto_users_trial: true, id: user.user_extension&.school_id)
end
def send_trial_apply_notify!
Educoder::Sms.notify_admin(send_type:'user_apply_auth')
rescue => ex
Rails.logger.error('发送通知管理员短信失败')
Rails.logger.error(ex.message)
ex.backtrace.each { |msg| Rails.logger.error(msg) }
end
end