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.
52 lines
1.3 KiB
52 lines
1.3 KiB
class Admins::UpdateUserService < ApplicationService
|
|
Error = Class.new(StandardError)
|
|
|
|
attr_reader :user, :params
|
|
|
|
def initialize(user, params)
|
|
@user = user
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
user.assign_attributes(user_attributes)
|
|
user.firstname = ''
|
|
user.password = password if params[:password].present?
|
|
|
|
if params[:identity].to_s == 'student'
|
|
params[:technical_title] = nil
|
|
else
|
|
params[:student_id] = nil
|
|
end
|
|
user.user_extension.assign_attributes(user_extension_attributes)
|
|
|
|
ActiveRecord::Base.transaction do
|
|
user.save!
|
|
user.user_extension.save!
|
|
|
|
update_gitlab_password if params[:password].present?
|
|
end
|
|
|
|
user
|
|
end
|
|
|
|
private
|
|
|
|
def user_attributes
|
|
params.slice(*%i[lastname nickname mail phone admin business is_test
|
|
professional_certification authentication])
|
|
end
|
|
|
|
def user_extension_attributes
|
|
params.slice(*%i[gender identity technical_title student_id location location_city school_id department_id])
|
|
end
|
|
|
|
def update_gitlab_password
|
|
return if user.gid.blank?
|
|
# 同步修改gitlab密码
|
|
Gitlab.client.edit_user(user.gid, password: params[:password])
|
|
rescue Exception => ex
|
|
Util.logger_error(ex)
|
|
raise Error, '保存失败'
|
|
end
|
|
end |