33-include_lib (" damsel/include/dmsl_customer_thrift.hrl" ).
44-include_lib (" damsel/include/dmsl_domain_thrift.hrl" ).
55
6+ % % BankCard operations
7+ -export ([find_or_create_bank_card /2 ]).
8+ -export ([get_recurrent_tokens_by_card /2 ]).
9+ -export ([save_recurrent_token_by_card /3 ]).
10+ -export ([tokens_to_map /1 ]).
11+
12+ % % Customer operations
613-export ([create_customer /1 ]).
714-export ([get_by_parent_payment /2 ]).
815-export ([get_recurrent_tokens /2 ]).
9- -export ([tokens_to_map /1 ]).
1016-export ([add_payment /3 ]).
11- -export ([save_recurrent_token / 4 ]).
17+ -export ([link_bank_card / 2 ]).
1218
1319-export_type ([cascade_tokens / 0 ]).
1420
1925-type recurrent_token () :: dmsl_customer_thrift :'RecurrentToken' ().
2026-type cascade_tokens () :: #{provider_terminal_key () => token ()}.
2127
22- % %
28+ % % BankCard operations
29+
30+ -spec find_or_create_bank_card (dmsl_domain_thrift :'PartyConfigRef' (), token ()) ->
31+ dmsl_customer_thrift :'BankCard' ().
32+ find_or_create_bank_card (PartyConfigRef , BankCardToken ) ->
33+ case find_bank_card (PartyConfigRef , BankCardToken ) of
34+ {ok , BankCard } ->
35+ BankCard ;
36+ {exception , # customer_BankCardNotFound {}} ->
37+ {ok , BankCard } = call (
38+ bank_card_storage ,
39+ 'Create' ,
40+ {PartyConfigRef , # customer_BankCardParams {bank_card_token = BankCardToken }}
41+ ),
42+ BankCard
43+ end .
44+
45+ -spec get_recurrent_tokens_by_card (dmsl_domain_thrift :'PartyConfigRef' (), token ()) ->
46+ [recurrent_token ()].
47+ get_recurrent_tokens_by_card (PartyConfigRef , BankCardToken ) ->
48+ case find_bank_card (PartyConfigRef , BankCardToken ) of
49+ {ok , # customer_BankCard {id = BankCardID }} ->
50+ {ok , Tokens } = call (bank_card_storage , 'GetRecurrentTokens' , {BankCardID }),
51+ Tokens ;
52+ {exception , # customer_BankCardNotFound {}} ->
53+ []
54+ end .
55+
56+ -spec save_recurrent_token_by_card (
57+ dmsl_domain_thrift :'PartyConfigRef' (),
58+ token (),
59+ {dmsl_domain_thrift :'PaymentRoute' (), token ()}
60+ ) -> ok .
61+ save_recurrent_token_by_card (
62+ PartyConfigRef ,
63+ BankCardToken ,
64+ {# domain_PaymentRoute {provider = ProviderRef , terminal = TerminalRef }, RecToken }
65+ ) ->
66+ # customer_BankCard {id = BankCardID } = find_or_create_bank_card (PartyConfigRef , BankCardToken ),
67+ {ok , _ } = call (
68+ bank_card_storage ,
69+ 'AddRecurrentToken' ,
70+ {# customer_RecurrentTokenParams {
71+ bank_card_id = BankCardID ,
72+ provider_ref = ProviderRef ,
73+ terminal_ref = TerminalRef ,
74+ token = RecToken
75+ }}
76+ ),
77+ ok .
78+
79+ -spec tokens_to_map ([recurrent_token ()]) -> cascade_tokens ().
80+ tokens_to_map (Tokens ) ->
81+ lists :foldl (fun token_to_map_entry /2 , #{}, Tokens ).
82+
83+ % % Customer operations
2384
2485-spec create_customer (dmsl_domain_thrift :'PartyConfigRef' ()) -> dmsl_customer_thrift :'Customer' ().
2586create_customer (PartyConfigRef ) ->
@@ -42,45 +103,46 @@ get_recurrent_tokens(InvoiceID, PaymentID) ->
42103 []
43104 end .
44105
45- -spec tokens_to_map ([recurrent_token ()]) -> cascade_tokens ().
46- tokens_to_map (Tokens ) ->
47- lists :foldl (fun token_to_map_entry /2 , #{}, Tokens ).
48-
49106-spec add_payment (dmsl_customer_thrift :'CustomerID' (), invoice_id (), payment_id ()) -> ok .
50107add_payment (CustomerID , InvoiceID , PaymentID ) ->
51108 {ok , ok } = call (customer_management , 'AddPayment' , {CustomerID , InvoiceID , PaymentID }),
52109 ok .
53110
54- -spec save_recurrent_token (
55- dmsl_customer_thrift :'CustomerID' (),
56- token (),
57- dmsl_domain_thrift :'PaymentRoute' (),
58- token ()
59- ) -> ok .
60- save_recurrent_token (
61- CustomerID ,
62- BankCardToken ,
63- # domain_PaymentRoute {provider = ProviderRef , terminal = TerminalRef },
64- RecToken
65- ) ->
66- {ok , # customer_BankCard {id = BankCardID }} = call (
111+ -spec link_bank_card (dmsl_customer_thrift :'CustomerID' (), token ()) -> ok .
112+ link_bank_card (CustomerID , BankCardToken ) ->
113+ {ok , _ } = call (
67114 customer_management ,
68115 'AddBankCard' ,
69116 {CustomerID , # customer_BankCardParams {bank_card_token = BankCardToken }}
70117 ),
71- {ok , _ } = call (
72- bank_card_storage ,
73- 'AddRecurrentToken' ,
74- {# customer_RecurrentTokenParams {
75- bank_card_id = BankCardID ,
76- provider_ref = ProviderRef ,
77- terminal_ref = TerminalRef ,
78- token = RecToken
79- }}
80- ),
81118 ok .
82119
83- % %
120+ % % Internal
121+
122+ find_bank_card (PartyConfigRef , BankCardToken ) ->
123+ SearchParams = # customer_BankCardSearchParams {
124+ bank_card_token = BankCardToken ,
125+ party_ref = PartyConfigRef
126+ },
127+ call (bank_card_storage , 'Find' , {SearchParams }).
128+
129+ collect_bank_card_tokens (# customer_BankCardRef {id = BankCardID }) ->
130+ {ok , Tokens } = call (bank_card_storage , 'GetRecurrentTokens' , {BankCardID }),
131+ Tokens .
132+
133+ token_to_map_entry (
134+ # customer_RecurrentToken {
135+ provider_ref = ProviderRef ,
136+ terminal_ref = TerminalRef ,
137+ token = Token
138+ },
139+ Acc
140+ ) ->
141+ Key = # customer_ProviderTerminalKey {
142+ provider_ref = ProviderRef ,
143+ terminal_ref = TerminalRef
144+ },
145+ Acc #{Key => Token }.
84146
85147call (ServiceName , Function , Args ) ->
86148 Service = hg_proto :get_service (ServiceName ),
@@ -102,21 +164,3 @@ call(ServiceName, Function, Args) ->
102164 },
103165 WoodyContext
104166 ).
105-
106- collect_bank_card_tokens (# customer_BankCardRef {id = BankCardID }) ->
107- {ok , Tokens } = call (bank_card_storage , 'GetRecurrentTokens' , {BankCardID }),
108- Tokens .
109-
110- token_to_map_entry (
111- # customer_RecurrentToken {
112- provider_ref = ProviderRef ,
113- terminal_ref = TerminalRef ,
114- token = Token
115- },
116- Acc
117- ) ->
118- Key = # customer_ProviderTerminalKey {
119- provider_ref = ProviderRef ,
120- terminal_ref = TerminalRef
121- },
122- Acc #{Key => Token }.
0 commit comments