Skip to content
This repository was archived by the owner on Jun 11, 2023. It is now read-only.

Commit 2f2f20a

Browse files
author
Marcelo Amancio de Lima Santos
committed
WIP]
1 parent 1a2e58e commit 2f2f20a

12 files changed

Lines changed: 119 additions & 47 deletions

File tree

lib/universe/bank/action/bank.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -225,12 +225,12 @@ defmodule Helix.Universe.Bank.Action.Bank do
225225
end
226226
end
227227

228-
@spec change_password(BankAccount.t, Entity.id) ::
228+
@spec change_password(BankAccount.t) ::
229229
{:ok, BankAccount.t, [BankAccountPasswordChangedEvent.t]}
230230
| {:error, :internal}
231-
def change_password(account, changed_by) do
231+
def change_password(account) do
232232
with {:ok, account} <- update_password(account) do
233-
event = BankAccountPasswordChangedEvent.new(account, changed_by)
233+
event = BankAccountPasswordChangedEvent.new(account)
234234

235235
{:ok, account, [event]}
236236
else

lib/universe/bank/action/flow/bank_account.ex

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
7272
BankAccountCreateProcess.execute(gateway, atm, %{}, meta, relay)
7373
end
7474

75-
@spec close(BankAccount.t) ::
75+
@spec close(Server.t, BankAccount.t, Server.t, relay) ::
7676
{:ok, Process.t}
7777
| BankAccountCloseProcess.executable_error
7878
@doc """
@@ -84,7 +84,11 @@ defmodule Helix.Universe.Bank.Action.Flow.BankAccount do
8484
src_account_number: bank_account.account_number
8585
}
8686

87-
BankAccountCloseProcess.execute(gateway, atm, %{}, meta, relay)
87+
params = %{
88+
bank_account: bank_account
89+
}
90+
91+
BankAccountCloseProcess.execute(gateway, atm, params, meta, relay)
8892
end
8993

9094
@spec change_password(BankAccount.t, Server.t, Server.t, relay) ::

lib/universe/bank/event/account_close.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@ defmodule Helix.Universe.Bank.Event.AccountClose do
3434
}
3535
end
3636
end
37+
end

lib/universe/bank/event/account_create.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ defmodule Helix.Universe.Bank.Event.AccountCreate do
3737
}
3838
end
3939
end
40+
end

lib/universe/bank/event/bank/account/password.ex

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,61 @@ defmodule Helix.Universe.Bank.Event.Bank.Account.Password do
2222
account: account
2323
}
2424
end
25+
26+
notify do
27+
28+
@event :bank_password_revealed
29+
30+
@doc false
31+
def generate_payload(event, _socket) do
32+
data =
33+
%{
34+
atm_id: event.account.atm_id,
35+
account_number: event.account.account_number,
36+
password: event.account.password
37+
}
38+
end
39+
40+
def whom_to_notify(event),
41+
do: %{account: event.entity_id}
42+
end
2543
end
2644

2745
event Changed do
2846

29-
alias Helix.Entity.Model.Entity
30-
alias Helix.Universe.Bank.Model.BankAccount
47+
alias Helix.Entity.Model.Entity
48+
alias Helix.Universe.Bank.Model.BankAccount
3149

32-
@type t :: %__MODULE__{
33-
entity_id: Entity.id,
34-
account: BankAccount.t
35-
}
50+
@type t :: %__MODULE__{
51+
account: BankAccount.t
52+
}
3653

37-
event_struct [:entity_id, :account]
54+
event_struct [:account]
3855

39-
@spec new(BankAccount.t, Entity.id) ::
40-
t
41-
def new(account = %BankAccount{}, entity_id) do
42-
%__MODULE__{
43-
entity_id: entity_id,
44-
account: account
45-
}
46-
end
56+
@spec new(BankAccount.t) ::
57+
t
58+
def new(account = %BankAccount{}) do
59+
%__MODULE__{
60+
account: account
61+
}
62+
end
63+
64+
notify do
65+
66+
@event :bank_password_changed
67+
68+
@doc false
69+
def generate_payload(event, _socket) do
70+
data =
71+
%{
72+
atm_id: event.account.atm_id,
73+
account_number: event.account.account_number,
74+
password: event.account.password
75+
}
76+
end
77+
78+
def whom_to_notify(event),
79+
do: %{account: event.account.owner_id}
80+
end
4781
end
4882
end

lib/universe/bank/event/bank/account/token.ex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,24 @@ defmodule Helix.Universe.Bank.Event.Bank.Account.Token do
2929
account: account
3030
}
3131
end
32+
33+
notify do
34+
35+
@event :bank_token_acquired
36+
37+
@doc false
38+
def generate_payload(event, _socket) do
39+
data =
40+
%{
41+
atm_id: to_string(event.account.atm_id),
42+
account_number: to_string(event.account.account_number),
43+
token_id: event.token.token_id
44+
}
45+
end
46+
47+
@doc false
48+
def whom_to_notify(event),
49+
do: %{account: event.entity_id}
50+
end
3251
end
3352
end

lib/universe/bank/event/handler/bank/account.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
1313
as: BankAccountUpdatedEvent
1414
alias Helix.Universe.Bank.Event.AccountCreate.Processed,
1515
as: AccountCreateProcessedEvent
16+
alias Helix.Universe.Bank.Event.AccountClose.Processed,
17+
as: AccountCloseProcessedEvent
1618
alias Helix.Universe.Bank.Event.RevealPassword.Processed,
1719
as: RevealPasswordProcessedEvent
1820
alias Helix.Universe.Bank.Event.ChangePassword.Processed,
@@ -33,9 +35,9 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
3335
end
3436

3537
def account_close_processed(event = %AccountCloseProcessedEvent{}) do
36-
flowing
38+
flowing do
3739
with \
38-
bank_account = BankQuery.fetch_account(event.atm_id, event.account_number)
40+
bank_account = BankQuery.fetch_account(event.atm_id, event.account_number),
3941
true <- not is_nil(bank_account),
4042
{:ok, events} <- BankAction.close_account(bank_account),
4143
on_success(fn -> Event.emit(events) end)
@@ -80,9 +82,7 @@ defmodule Helix.Universe.Bank.Event.Handler.Bank.Account do
8082
with \
8183
changed_by = %{} <- EntityQuery.fetch_by_server(event.gateway_id),
8284
{:ok, _bank_account, events} <-
83-
BankAction.change_password(
84-
event.account, changed_by.entity_id
85-
),
85+
BankAction.change_password(event.account),
8686
on_success(fn -> Event.emit(events, from: event) end)
8787
do
8888
:ok

lib/universe/bank/process/bank/account/close_account.ex

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ process Helix.Universe.Bank.Process.Bank.Account.AccountClose do
99

1010
@process_type :bank_close_account
1111

12-
@type t :: %__MODULE__{}
12+
@type t :: %__MODULE__{
13+
account: BankAccount.t
14+
}
1315

14-
@type creation_params :: %{}
16+
@type creation_params :: %{account: BankAccount.t}
1517

1618
@type objective :: %{cpu: resource_usage}
1719

18-
@type resource :: %{
20+
@type resources :: %{
1921
objective: objective,
2022
static: map,
2123
l_dynamic: [:cpu],
@@ -25,12 +27,14 @@ process Helix.Universe.Bank.Process.Bank.Account.AccountClose do
2527
@type resources_params :: %{}
2628

2729
@spec new(creation_params) :: t
28-
def new(%{}) do
29-
%__MODULE__{}
30+
def new(%{bank_account: account}) do
31+
%__MODULE__{
32+
account: account
33+
}
3034
end
3135

3236
@spec resources(resources_params) :: resources
33-
def resources(params = %{})
37+
def resources(params = %{}),
3438
do: get_resources params
3539

3640
processable do
@@ -80,3 +84,4 @@ process Helix.Universe.Bank.Process.Bank.Account.AccountClose do
8084
end
8185
end
8286
end
87+
end

lib/universe/bank/process/bank/account/create_account.ex

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ process Helix.Universe.Bank.Process.Bank.Account.AccountCreate do
99

1010
@process_type :bank_create_account
1111

12-
@type t :: %__MODULE__{}
12+
@type t :: %__MODULE__{
13+
atm_id: ATM.id
14+
}
1315

14-
@type creation_params :: %{}
16+
@type creation_params :: %{atm_id: ATM.id}
1517

1618
@type objective :: %{cpu: resource_usage}
1719

18-
@type resource :: %{
20+
@type resources :: %{
1921
objective: objective,
2022
static: map,
2123
l_dynamic: [:cpu],
@@ -25,11 +27,11 @@ process Helix.Universe.Bank.Process.Bank.Account.AccountCreate do
2527
@type resources_params :: %{}
2628

2729
@spec new(creation_params) :: t
28-
def new do
29-
%__MODULE__{}
30+
def new(%{atm_id: atm_id}) do
31+
%__MODULE__{atm_id: atm_id}
3032
end
3133

32-
@spec resources(resource_params) :: resources
34+
@spec resources(resources_params) :: resources
3335
def resources(params = %{}),
3436
do: get_resources params
3537

@@ -72,11 +74,11 @@ process Helix.Universe.Bank.Process.Bank.Account.AccountCreate do
7274
@type params :: AccountCreateProcess.creation_params
7375

7476
@type meta ::
75-
${
77+
%{
7678
optional(atom) => term
7779
}
7880

79-
resources(_, _, %{}) do
81+
resources(_, _, %{}, _) do
8082
%{}
8183
end
8284
end

lib/universe/bank/websocket/channel/requests/close_account.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ request Helix.Universe.Bank.Websocket.Requests.CloseAccount do
3939
bank_account = BankQuery.fetch_account(atm_id, account_number)
4040
atm = ServerQuery.fetch(atm_id)
4141
relay = request.relay
42+
gateway = ServerQuery.fetch(socket.assigns.gateway.server_id)
4243
process = BankPublic.close_account(gateway, bank_account, atm, relay)
4344

4445
case process do

0 commit comments

Comments
 (0)