@@ -27,6 +27,12 @@ defmodule Helix.Universe.Bank.Action.Bank do
2727 as: BankAccountPasswordChangedEvent
2828 alias Helix.Universe.Bank.Event.Bank.Account.Token.Acquired ,
2929 as: BankAccountTokenAcquiredEvent
30+ alias Helix.Universe.Bank.Event.Bank.Account.Removed ,
31+ as: BankAccountRemovedEvent
32+ alias Helix.Universe.Bank.Event.Bank.Transfer.Successful ,
33+ as: BankTransferSuccessfulEvent
34+ alias Helix.Universe.Bank.Event.Bank.Transfer.Failed ,
35+ as: BankTransferFailedEvent
3036
3137 @ spec start_transfer ( BankAccount . t , BankAccount . t , pos_integer , Account . idt ) ::
3238 { :ok , BankTransfer . t }
@@ -51,9 +57,8 @@ defmodule Helix.Universe.Bank.Action.Bank do
5157 as: :start
5258
5359 @ spec complete_transfer ( BankTransfer . t ) ::
54- :ok
55- | { :error , { :transfer , :notfound } }
56- | { :error , :internal }
60+ { :ok , BankTransfer . t , [ BankTransferSuccessfulEvent . t ] }
61+ | { :error , BankTransfer . t , [ BankTransferFailedEvent . t ] }
5762 @ doc """
5863 Completes the transfer.
5964
@@ -66,9 +71,19 @@ defmodule Helix.Universe.Bank.Action.Bank do
6671 This function should not be called directly by Public. Instead, it must be
6772 triggered by the BankTransferCompletedEvent.
6873 """
69- defdelegate complete_transfer ( transfer ) ,
70- to: BankTransferInternal ,
71- as: :complete
74+ def complete_transfer ( transfer ) do
75+ case BankTransferInternal . complete ( transfer ) do
76+ :ok ->
77+ { :ok , transfer , [ BankTransferSuccessfulEvent . new ( transfer . transfer_id ) ] }
78+
79+ { :error , reason } ->
80+ {
81+ :error ,
82+ transfer ,
83+ [ BankTransferFailedEvent . new ( transfer . transfer_id , reason ) ]
84+ }
85+ end
86+ end
7287
7388 @ spec abort_transfer ( BankTransfer . t ) ::
7489 :ok
@@ -91,7 +106,7 @@ defmodule Helix.Universe.Bank.Action.Bank do
91106 as: :abort
92107
93108 @ spec open_account ( Account . idt , ATM . id ) ::
94- { :ok , BankAccount . t }
109+ { :ok , BankAccount . t , [ BankAccountUpdatedEvent . t ] }
95110 | { :error , Ecto.Changeset . t }
96111 @ doc """
97112 Opens a bank account.
@@ -103,23 +118,34 @@ defmodule Helix.Universe.Bank.Action.Bank do
103118 |> Map . get ( :entity_id )
104119 |> NPCQuery . fetch ( )
105120
106- % { owner_id: owner , atm_id: atm , bank_id: bank }
107- |> BankAccountInternal . create ( )
121+ case BankAccountInternal . create ( owner , atm , bank ) do
122+ { :ok , bank_acc } ->
123+ { :ok , bank_acc , [ BankAccountUpdatedEvent . new ( bank_acc , :created ) ] }
124+
125+ error ->
126+ error
127+ end
108128 end
109129
110130 @ spec close_account ( BankAccount . t ) ::
111131 :ok
112- | { :error , { :account , :notfound } }
113- | { :error , { :account , :notempty } }
132+ | { :error , { :bank_account , :not_found } }
133+ | { :error , { :bank_account , :not_empty } }
114134 @ doc """
115135 Closes a bank account.
116136
117137 May fail if the account is invalid or not empty. In order to close an account,
118138 its balance must be empty.
119139 """
120- defdelegate close_account ( account ) ,
121- to: BankAccountInternal ,
122- as: :close
140+ def close_account ( account ) do
141+ case BankAccountInternal . close ( account ) do
142+ :ok ->
143+ { :ok , [ BankAccountRemovedEvent . new ( account ) ] }
144+
145+ { :error , reason } ->
146+ { :error , reason }
147+ end
148+ end
123149
124150 @ spec direct_deposit ( BankAccount . t , BankAccount . amount ) ::
125151 { :ok , BankAccount . t , [ BankAccountUpdatedEvent . t ] }
0 commit comments