diff --git a/app/controllers/money_moves_controller.rb b/app/controllers/money_moves_controller.rb index c0002ed..e0aa8c4 100644 --- a/app/controllers/money_moves_controller.rb +++ b/app/controllers/money_moves_controller.rb @@ -4,19 +4,20 @@ class MoneyMovesController < ApplicationController end def create - money_move = MoneyMove.create_move(money_move_params) - if money_move.save - json_response(money_move) - else - error_response(:bad_request) - end + money_move = MoneyMove.create_move(money_move_params) + + if money_move + json_response(money_move) + else + error_response(:bad_request) + end end - def money_move_params + def money_move_params params.require(:money_move).permit( - :description, - :amount, - :from_homie_id, + :description, + :amount, + :from_homie_id, :to_homie_id ) end diff --git a/app/models/money_move.rb b/app/models/money_move.rb index 4f87be8..41a16e1 100644 --- a/app/models/money_move.rb +++ b/app/models/money_move.rb @@ -1,25 +1,54 @@ class MoneyMove < ApplicationRecord belongs_to :homie - def create_move(params) - common_params = { description: params[:description] } + def self.create_move(params) + return false unless valid_money_move?(params) - move_from = MoneyMove.new( - common_params + { - homie_id: params[:from_homie_id], - amount: -BigDecimal.new(params[:amount]) - } - ) - move_to = MoneyMove.new( - common_params + { - homie_id: params[:from_homie_id], - amount: BigDecimal.new(params[:amount]) - } - ) + move_from = create_move_from(params) if double_money_move?(params) + move_to = create_move_to(params) - MoneyMove.transaction do - move_from.save! + MoneyMove.transaction do + move_from.save! if move_from.present? move_to.save! end end + + class << self + private + + def valid_money_move?(params) + params[:amount].present? && params[:to_homie_id].present? + end + + def double_money_move?(params) + params[:from_homie_id].present? && params[:to_homie_id].present? + end + + def from_source_name(params) + if double_money_move?(params) + Homie.find(params[:from_homie_id]).name + else + 'External' + end + end + + def create_move_from(params) + to_homie_name = Homie.find(params[:to_homie_id]).name + new_desc = "[#{to_homie_name}] #{params[:description]}".lstrip + MoneyMove.new( + homie_id: params[:from_homie_id], + amount: -params[:amount].to_d, + description: new_desc + ) + end + + def create_move_to(params) + new_desc = "[#{from_source_name(params)}] #{params[:description]}".lstrip + MoneyMove.new( + homie_id: params[:to_homie_id], + amount: params[:amount].to_d, + description: new_desc + ) + end + end end