From 32c97bb60fd0dd0297d001118fb1caac767cd3d4 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Tue, 8 Feb 2022 20:13:31 -0500 Subject: [PATCH] Make sure from and to are in correct direction Doesn't affect any current code paths, but should be correct in case we ever start using it in the inbound case. Also from does not have to be a formatted phone number, can be a string like Anonymous, etc. --- .rubocop.yml | 1 + lib/call_attempt.rb | 21 +++++++++------------ lib/call_attempt_repo.rb | 30 ++++++++++++++++++++++++++---- web.rb | 11 +++++------ 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/.rubocop.yml b/.rubocop.yml index c76c911..d0b95af 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -40,6 +40,7 @@ Naming/MethodParameterName: - id - iq - db + - to Layout/IndentationStyle: Enabled: false diff --git a/lib/call_attempt.rb b/lib/call_attempt.rb index 9116cae..34b1280 100644 --- a/lib/call_attempt.rb +++ b/lib/call_attempt.rb @@ -11,24 +11,21 @@ class CallAttempt "cad_beta_unlimited-v20210223" => 1.1 }.freeze - def self.for(customer, other_tel, rate, usage, direction:, **kwargs) + def self.for(customer, rate, usage, direction:, **kwargs) kwargs.merge!(direction: direction) included_credit = [customer.minute_limit.to_d - usage, 0].max if !rate || rate >= EXPENSIVE_ROUTE.fetch(customer.plan_name, 0.1) Unsupported.new(direction: direction) elsif included_credit + customer.balance < rate * 10 - NoBalance.for(customer, other_tel, rate, usage, **kwargs) + NoBalance.for(customer, rate, usage, **kwargs) else - for_ask_or_go(customer, other_tel, rate, usage, **kwargs) + for_ask_or_go(customer, rate, usage, **kwargs) end end - def self.for_ask_or_go(customer, otel, rate, usage, digits: nil, **kwargs) + def self.for_ask_or_go(customer, rate, usage, digits: nil, **kwargs) can_use = customer.minute_limit.to_d + customer.monthly_overage_limit - kwargs.merge!( - customer_id: customer.customer_id, - from: customer.registered?.phone, to: otel - ) + kwargs.merge!(customer_id: customer.customer_id) if digits != "1" && can_use - usage < rate * 10 AtLimit.new(**kwargs) else @@ -38,7 +35,7 @@ class CallAttempt value_semantics do customer_id String - from(/\A\+\d+\Z/) + from String to(/\A\+\d+\Z/) call_id String direction Either(:inbound, :outbound) @@ -93,12 +90,12 @@ class CallAttempt end class NoBalance - def self.for(customer, other_tel, rate, usage, direction:, **kwargs) + def self.for(customer, rate, usage, direction:, **kwargs) LowBalance.for(customer).then(&:notify!).then do |amount| if amount&.positive? CallAttempt.for( customer.with_balance(customer.balance + amount), - other_tel, rate, usage, direction: direction, **kwargs + rate, usage, direction: direction, **kwargs ) else NoBalance.new(balance: customer.balance, direction: direction) @@ -137,7 +134,7 @@ class CallAttempt class AtLimit value_semantics do customer_id String - from(/\A\+\d+\Z/) + from String to(/\A\+\d+\Z/) call_id String direction Either(:inbound, :outbound) diff --git a/lib/call_attempt_repo.rb b/lib/call_attempt_repo.rb index fb16917..52cc5f0 100644 --- a/lib/call_attempt_repo.rb +++ b/lib/call_attempt_repo.rb @@ -10,19 +10,41 @@ class CallAttemptRepo db Anything(), default: LazyObject.new { DB } end - def find(customer, other_tel, direction: :outbound, **kwargs) + def find_outbound(customer, to, **kwargs) + find( + customer, + to, + direction: :outbound, + from: customer.registered?.phone, + to: to, + **kwargs + ) + end + + def find_inbound(customer, from, **kwargs) + find( + customer, + from, + direction: :inbound, + from: from, + to: customer.registered?.phone, + **kwargs + ) + end + +protected + + def find(customer, other_tel, direction:, **kwargs) EMPromise.all([ find_rate(customer.plan_name, other_tel, direction), find_usage(customer.customer_id) ]).then do |(rate, usage)| CallAttempt.for( - customer, other_tel, rate, usage, direction: direction, **kwargs + customer, rate, usage, direction: direction, **kwargs ) end end -protected - def find_usage(customer_id) promise = db.query_defer(<<~SQL, [customer_id]) SELECT COALESCE(SUM(charge), 0) AS a FROM cdr_with_charge diff --git a/web.rb b/web.rb index 2740b52..53f73ec 100644 --- a/web.rb +++ b/web.rb @@ -246,12 +246,11 @@ class Web < Roda r.post do customer_repo.find_by_tel(params["to"]).then do |customer| - call_attempt_repo.find( + call_attempt_repo.find_inbound( customer, params["from"], call_id: call_id, - digits: params["digits"], - direction: :inbound + digits: params["digits"] ).then { |ca| render(*ca.to_render) } end end @@ -263,9 +262,9 @@ class Web < Roda ).find_by_tel(params["to"]).then { |customer| EMPromise.all([ customer.fwd, - call_attempt_repo.find( + call_attempt_repo.find_inbound( customer, params["from"], - call_id: params["callId"], direction: :inbound + call_id: params["callId"] ) ]) }.then do |(fwd, ca)| @@ -302,7 +301,7 @@ class Web < Roda customer_repo( sgx_repo: Bwmsgsv2Repo.new ).find_by_format(from).then do |c| - call_attempt_repo.find( + call_attempt_repo.find_outbound( c, params["to"], call_id: params["callId"], -- 2.34.5