Files
timeoverflow/app/controllers/transfers_controller.rb

71 lines
1.6 KiB
Ruby

class TransfersController < ApplicationController
include WithTransferParams
def create
@source = find_source
@account = Account.find(transfer_params[:destination])
transfer = Transfer.new(
transfer_params.merge(source: @source, destination: @account)
)
persister = ::Persister::TransferPersister.new(transfer)
if persister.save
redirect_to redirect_target
else
redirect_back fallback_location: redirect_target, alert: transfer.errors.full_messages.to_sentence
end
end
def new
transfer_factory = TransferFactory.new(
current_organization,
current_user,
params[:offer],
params[:destination_account_id]
)
render(
:new,
locals: {
accountable: transfer_factory.accountable,
transfer: transfer_factory.build_transfer,
offer: transfer_factory.offer,
sources: transfer_factory.transfer_sources
}
)
end
def delete_reason
@transfer = Transfer.find(params[:id])
@transfer.update_columns(reason: nil)
respond_to do |format|
format.json { head :ok }
format.html { redirect_back(fallback_location: request.referer) }
end
end
private
def find_source
if admin?
Account.find(transfer_params[:source])
else
current_user.members.find_by(organization: current_organization).account
end
end
def redirect_target
case accountable = @account.accountable
when Organization
accountable
when Member
accountable.user
else
raise ArgumentError
end
end
end