Class: Dscf::Credit::RiskApplicationService

Inherits:
Object
  • Object
show all
Defined in:
app/services/dscf/credit/risk_application_service.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(eligible_credit_line, risk_factor) ⇒ RiskApplicationService

Returns a new instance of RiskApplicationService.



5
6
7
8
9
# File 'app/services/dscf/credit/risk_application_service.rb', line 5

def initialize(eligible_credit_line, risk_factor)
  @eligible_credit_line = eligible_credit_line
  @risk_factor = risk_factor.nil? ? nil : risk_factor.to_f
  @errors = []
end

Instance Attribute Details

#eligible_credit_lineObject (readonly)

Returns the value of attribute eligible_credit_line.



3
4
5
# File 'app/services/dscf/credit/risk_application_service.rb', line 3

def eligible_credit_line
  @eligible_credit_line
end

#errorsObject (readonly)

Returns the value of attribute errors.



3
4
5
# File 'app/services/dscf/credit/risk_application_service.rb', line 3

def errors
  @errors
end

#risk_factorObject (readonly)

Returns the value of attribute risk_factor.



3
4
5
# File 'app/services/dscf/credit/risk_application_service.rb', line 3

def risk_factor
  @risk_factor
end

Instance Method Details

#apply_riskObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/services/dscf/credit/risk_application_service.rb', line 11

def apply_risk
  return error_result("Eligible credit line is required") unless eligible_credit_line
  return error_result("Risk factor is required") if risk_factor.nil?
  return error_result("Risk factor must be between 0.0 and 0.9") unless valid_risk_factor?

  begin
    ActiveRecord::Base.transaction do
      eligible_credit_line.risk = risk_factor

      new_available_limit = calculate_available_limit_with_risk
      eligible_credit_line.available_limit = new_available_limit

      eligible_credit_line.save!

      update_loan_profile_total_limit

      success_result(eligible_credit_line, "Risk factor applied successfully")
    end
  rescue StandardError => e
    Rails.logger.error "Risk application failed: #{e.message}"
    Rails.logger.error e.backtrace.join("\n")
    error_result("Failed to apply risk factor: #{e.message}")
  end
end