Class: Api::V5::PhoneVerificationsController

Inherits:
BaseController
  • Object
show all
Includes:
ActionController::Cookies, Concerns::Authorization
Defined in:
app/controllers/api/v5/phone_verifications_controller.rb

Overview

typed: ignore frozen_string_literal: true

Constant Summary collapse

FIRST_REQUEST_EXPIRY_TIME =
1.minute
SUBSEQUENT_REQUESTS_EXPIRY_TIME =
3.minutes

Constants inherited from BaseController

BaseController::CACHE_NAMESPACE, BaseController::INTERNAL_SERVER_ERROR_MESSAGE, BaseController::ResponseSchema

Instance Method Summary collapse

Methods inherited from BaseController

#identity_cache_memoization

Methods included from LogrageCustomLogger

#append_info_to_payload

Methods included from ResponseCacheConcern

#my_response_cache

Instance Method Details

#request_codeObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/controllers/api/v5/phone_verifications_controller.rb', line 12

def request_code
  authorize! if params[:access_token].present?
  user = current_user

  if user.present? && user.phone_v2.blank?
    render(json: { success: false, message: 'User does not have a phone number.' }) && return
  end

  # Default to false if 'first_req' is not provided
  first_request = params[:first_req] == 'true'

  expiry_time = first_request ? FIRST_REQUEST_EXPIRY_TIME : SUBSEQUENT_REQUESTS_EXPIRY_TIME

  service = if user.present?
              PhoneVerificationForMemberService.new(user.id, nil, session: session, expiry_time: expiry_time, first_request: first_request)
            else
              PhoneVerificationForGuestService.new(@phone, nil, session: session, expiry_time: expiry_time, first_request: first_request)
            end

  request_code = service.request_code
  reff_code = generate_reff_code
  set_reff_cookie(reff_code, expiry_time)
  set_reff_in_session(reff_code, first_request)

  if request_code.success?
    sms = service.request_data_otp
    time = parse_time(sms[:time])
    render json: {
      success: true,
      message: I18n.t('reservation.phone_verification.proceed'),
      data: {
        verified: false,
        otp: (sms[:code] if params[:testing].present?),
        phone: "+#{sms[:phone]}",
        time: time,
        reff: reff_code,
      },
    }
  else
    render json: {
      success: false,
      message: request_code.errors.full_messages.to_sentence,
      data: {
        verified: true,
        otp: nil,
        phone: "+#{@phone}",
        time: Time.now.iso8601,
        reff: reff_code,
      },
    }
  end
end

#verifyObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'app/controllers/api/v5/phone_verifications_controller.rb', line 65

def verify
  authorize! if params[:access_token].present?
  user = current_user

  if user.present? && user.phone_v2.blank?
    render(json: { success: false, message: 'User does not have a phone number.' }) && return
  end

  service = if user.present?
              PhoneVerificationForMemberService.new(user.id, params.require(:verification_code), session: session)
            else
              PhoneVerificationForGuestService.new(@phone, params.require(:verification_code), session: session)
            end

  request_code = service.verify
  if request_code.success?
    render json: { data: nil, message: I18n.t('reservation.phone_verification.success'), success: true }
  else
    render json: { data: nil, message: request_code.errors.full_messages.to_sentence, success: false }
  end
end