|
- 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.mail = params[:mail].to_s.presence
- user.phone = params[:phone].to_s.presence
- user.firstname = ''
- user.password = params[:password] if params[:password].present?
-
- user.user_extension.assign_attributes(user_extension_attributes) if user.user_extension.present?
-
- old_login = user.login
- ActiveRecord::Base.transaction do
- user.save!
- user.user_extension.save! if user.user_extension.present?
- update_gitea_user(old_login)
- update_gitea_user_email(user.previous_changes[:mail])
- end
-
- user
- end
-
- private
-
- def user_attributes
- params.slice(*%i[lastname nickname mail phone admin business is_test login
- professional_certification authentication is_shixun_marker website_permission])
- end
-
- def user_extension_attributes
- params.slice(*%i[gender identity technical_title student_id location location_city school_id department_id])
- end
-
- def gitea_user_params
- hash = {
- password: params[:password].to_s.presence,
- email: user.mail,
- login_name: params[:login].to_s.presence,
- admin: boolean_admin
- }.compact
-
- hash.delete_if {|_,v| v.to_s.strip == ''}
- end
-
- def boolean_admin
- admin = params[:admin].to_s.presence
- case admin
- when "0" then false
- when "1" then true
- end
- end
-
- def update_gitea_user(old_login)
- return if user.gitea_uid.blank?
-
- Gitea::User::UpdateInteractor.call(old_login, gitea_user_params)
- rescue Exception => ex
- Util.logger_error(ex)
- raise Error, '保存失败'
- end
-
- def update_gitea_user_email(change_options)
- return if change_options.blank?
- return if user.gitea_uid.blank? || user.gitea_token.blank?
- $gitea_client.delete_user_emails({body: {emails: [change_options[0]]}.to_json, query: {access_token: user.gitea_token}})
- $gitea_client.post_user_emails({body: {emails: [change_options[1]]}.to_json, query: {access_token: user.gitea_token}})
- rescue Exception => ex
- Util.logger_error(ex)
- raise Error, '保存失败'
- end
- end
|