app/services/otp_preference_updater.rb
# frozen_string_literal: true
class OtpPreferenceUpdater
def initialize(user:, preference:, phone_id:, default: nil)
@user = user
@preference = preference
@default = default
@phone_id = phone_id
end
def call
return false unless user
return false unless phone_configuration_changed?
UpdateUserPhoneConfiguration.update!(
user: user,
attributes: {
otp_delivery_preference: preference,
phone_id: phone_id,
otp_make_default_number: default,
},
)
end
private
attr_reader :user, :preference, :phone_id, :default
def phone_configuration_changed?
return true if preference != phone_delivery_preference
return true if default && not_default_phone_configuration?
false
end
def phone_configuration
MfaContext.new(user).phone_configuration(phone_id)
end
def phone_delivery_preference
return nil if phone_configuration.blank?
phone_configuration.delivery_preference
end
def not_default_phone_configuration?
phone_configuration != user.default_phone_configuration
end
end