Files
grecia/app/models/concerns/verification.rb
Javi Martín 38ad65605e Use excluding instead of where.not(id:
This method was added in Rails 7.0 and makes the code slihgtly more
readable.

The downside is that it generates two queries instead of one, so it
might generate some confusion when debugging SQL queries. Its impact on
performance is probably negligible.
2024-07-22 18:35:35 +02:00

101 lines
2.6 KiB
Ruby

module Verification
extend ActiveSupport::Concern
included do
scope :residence_verified, -> { where.not(residence_verified_at: nil) }
scope :residence_unverified, -> { excluding(residence_verified) }
scope :residence_and_phone_verified, -> { residence_verified.where.not(confirmed_phone: nil) }
scope :residence_or_phone_unverified, -> { residence_unverified.or(where(confirmed_phone: nil)) }
scope :phone_not_fully_confirmed, -> { where(unconfirmed_phone: nil).or(where(confirmed_phone: nil)) }
scope :level_three_verified, -> { where.not(verified_at: nil) }
scope :level_two_verified, -> do
where.not(level_two_verified_at: nil).or(residence_and_phone_verified.where(verified_at: nil))
end
scope :level_two_or_three_verified, -> { level_two_verified.or(level_three_verified) }
scope :unverified, -> do
residence_or_phone_unverified.where(verified_at: nil, level_two_verified_at: nil)
end
scope :incomplete_verification, -> do
residence_unverified.where(failed_census_calls_count: 1..)
.or(residence_verified.phone_not_fully_confirmed)
end
end
def skip_verification?
Setting["feature.user.skip_verification"].present?
end
def verification_email_sent?
return true if skip_verification?
email_verification_token.present?
end
def verification_sms_sent?
return true if skip_verification?
unconfirmed_phone.present? && sms_confirmation_code.present?
end
def verification_letter_sent?
return true if skip_verification?
letter_requested_at.present? && letter_verification_code.present?
end
def residence_verified?
return true if skip_verification?
residence_verified_at.present?
end
def sms_verified?
return true if skip_verification?
confirmed_phone.present?
end
def level_two_verified?
return true if skip_verification?
level_two_verified_at.present? || (residence_verified? && sms_verified?)
end
def level_three_verified?
return true if skip_verification?
verified_at.present?
end
def level_two_or_three_verified?
level_two_verified? || level_three_verified?
end
def unverified?
!level_two_or_three_verified?
end
def failed_residence_verification?
!residence_verified? && !failed_census_calls.empty?
end
def no_phone_available?
!verification_sms_sent?
end
def user_type
if level_three_verified?
:level_3_user
elsif level_two_verified?
:level_2_user
else
:level_1_user
end
end
def sms_code_not_confirmed?
!sms_verified?
end
end