@@ -5,7 +5,9 @@ use common_utils::{ext_traits::OptionExt, id_type};
5
5
use error_stack:: ResultExt ;
6
6
7
7
use super :: errors;
8
- use crate :: { core:: payment_methods, db:: errors:: StorageErrorExt , routes, types:: domain} ;
8
+ use crate :: {
9
+ configs:: settings, core:: payment_methods, db:: errors:: StorageErrorExt , routes, types:: domain,
10
+ } ;
9
11
10
12
#[ cfg( feature = "v2" ) ]
11
13
pub async fn list_payment_methods (
@@ -57,7 +59,7 @@ pub async fn list_payment_methods(
57
59
let response =
58
60
hyperswitch_domain_models:: merchant_connector_account:: FlattenedPaymentMethodsEnabled :: from_payment_connectors_list ( payment_connector_accounts)
59
61
. perform_filtering ( )
60
- . get_required_fields ( RequiredFieldsInput :: new ( ) )
62
+ . get_required_fields ( RequiredFieldsInput :: new ( state . conf . required_fields . clone ( ) ) )
61
63
. perform_surcharge_calculation ( )
62
64
. generate_response ( customer_payment_methods) ;
63
65
@@ -67,11 +69,41 @@ pub async fn list_payment_methods(
67
69
}
68
70
69
71
/// Container for the inputs required for the required fields
70
- struct RequiredFieldsInput { }
72
+ struct RequiredFieldsInput {
73
+ required_fields_config : settings:: RequiredFields ,
74
+ }
71
75
72
76
impl RequiredFieldsInput {
73
- fn new ( ) -> Self {
74
- Self { }
77
+ fn new ( required_fields_config : settings:: RequiredFields ) -> Self {
78
+ Self {
79
+ required_fields_config,
80
+ }
81
+ }
82
+ }
83
+
84
+ trait GetRequiredFields {
85
+ fn get_required_fields (
86
+ & self ,
87
+ payment_method_enabled : & hyperswitch_domain_models:: merchant_connector_account:: PaymentMethodsEnabledForConnector ,
88
+ ) -> Option < & settings:: RequiredFieldFinal > ;
89
+ }
90
+
91
+ impl GetRequiredFields for settings:: RequiredFields {
92
+ fn get_required_fields (
93
+ & self ,
94
+ payment_method_enabled : & hyperswitch_domain_models:: merchant_connector_account:: PaymentMethodsEnabledForConnector ,
95
+ ) -> Option < & settings:: RequiredFieldFinal > {
96
+ self . 0
97
+ . get ( & payment_method_enabled. payment_method )
98
+ . and_then ( |required_fields_for_payment_method| {
99
+ required_fields_for_payment_method. 0 . get (
100
+ & payment_method_enabled
101
+ . payment_methods_enabled
102
+ . payment_method_subtype ,
103
+ )
104
+ } )
105
+ . map ( |connector_fields| & connector_fields. fields )
106
+ . and_then ( |connector_hashmap| connector_hashmap. get ( & payment_method_enabled. connector ) )
75
107
}
76
108
}
77
109
@@ -83,23 +115,50 @@ struct FilteredPaymentMethodsEnabled(
83
115
impl FilteredPaymentMethodsEnabled {
84
116
fn get_required_fields (
85
117
self ,
86
- _input : RequiredFieldsInput ,
118
+ input : RequiredFieldsInput ,
87
119
) -> RequiredFieldsForEnabledPaymentMethodTypes {
120
+ let required_fields_config = input. required_fields_config ;
121
+
88
122
let required_fields_info = self
89
123
. 0
90
124
. into_iter ( )
91
- . map (
92
- |payment_methods_enabled| RequiredFieldsForEnabledPaymentMethod {
93
- required_field : None ,
125
+ . map ( |payment_methods_enabled| {
126
+ let required_fields =
127
+ required_fields_config. get_required_fields ( & payment_methods_enabled) ;
128
+
129
+ let required_fields = required_fields
130
+ . map ( |required_fields| {
131
+ let common_required_fields = required_fields
132
+ . common
133
+ . iter ( )
134
+ . flatten ( )
135
+ . map ( ToOwned :: to_owned) ;
136
+
137
+ // Collect mandate required fields because this is for zero auth mandates only
138
+ let mandate_required_fields = required_fields
139
+ . mandate
140
+ . iter ( )
141
+ . flatten ( )
142
+ . map ( ToOwned :: to_owned) ;
143
+
144
+ // Combine both common and mandate required fields
145
+ common_required_fields
146
+ . chain ( mandate_required_fields)
147
+ . collect :: < Vec < _ > > ( )
148
+ } )
149
+ . unwrap_or_default ( ) ;
150
+
151
+ RequiredFieldsForEnabledPaymentMethod {
152
+ required_fields,
94
153
payment_method_type : payment_methods_enabled. payment_method ,
95
154
payment_method_subtype : payment_methods_enabled
96
155
. payment_methods_enabled
97
156
. payment_method_subtype ,
98
157
payment_experience : payment_methods_enabled
99
158
. payment_methods_enabled
100
159
. payment_experience ,
101
- } ,
102
- )
160
+ }
161
+ } )
103
162
. collect ( ) ;
104
163
105
164
RequiredFieldsForEnabledPaymentMethodTypes ( required_fields_info)
@@ -108,7 +167,7 @@ impl FilteredPaymentMethodsEnabled {
108
167
109
168
/// Element container to hold the filtered payment methods with required fields
110
169
struct RequiredFieldsForEnabledPaymentMethod {
111
- required_field : Option < Vec < api_models:: payment_methods:: RequiredFieldInfo > > ,
170
+ required_fields : Vec < api_models:: payment_methods:: RequiredFieldInfo > ,
112
171
payment_method_subtype : common_enums:: PaymentMethodType ,
113
172
payment_method_type : common_enums:: PaymentMethod ,
114
173
payment_experience : Option < common_enums:: PaymentExperience > ,
@@ -119,7 +178,7 @@ struct RequiredFieldsForEnabledPaymentMethodTypes(Vec<RequiredFieldsForEnabledPa
119
178
120
179
/// Element Container to hold the filtered payment methods enabled with required fields and surcharge
121
180
struct RequiredFieldsAndSurchargeForEnabledPaymentMethodType {
122
- required_field : Option < Vec < api_models:: payment_methods:: RequiredFieldInfo > > ,
181
+ required_fields : Vec < api_models:: payment_methods:: RequiredFieldInfo > ,
123
182
payment_method_subtype : common_enums:: PaymentMethodType ,
124
183
payment_method_type : common_enums:: PaymentMethod ,
125
184
payment_experience : Option < common_enums:: PaymentExperience > ,
@@ -146,7 +205,7 @@ impl RequiredFieldsAndSurchargeForEnabledPaymentMethodTypes {
146
205
payment_method_type : payment_methods_enabled. payment_method_type ,
147
206
payment_method_subtype : payment_methods_enabled. payment_method_subtype ,
148
207
payment_experience : payment_methods_enabled. payment_experience ,
149
- required_fields : payment_methods_enabled. required_field ,
208
+ required_fields : payment_methods_enabled. required_fields ,
150
209
surcharge_details : payment_methods_enabled. surcharge ,
151
210
extra_information : None ,
152
211
}
@@ -170,7 +229,7 @@ impl RequiredFieldsForEnabledPaymentMethodTypes {
170
229
. map (
171
230
|payment_methods_enabled| RequiredFieldsAndSurchargeForEnabledPaymentMethodType {
172
231
payment_method_type : payment_methods_enabled. payment_method_type ,
173
- required_field : payment_methods_enabled. required_field ,
232
+ required_fields : payment_methods_enabled. required_fields ,
174
233
payment_method_subtype : payment_methods_enabled. payment_method_subtype ,
175
234
payment_experience : payment_methods_enabled. payment_experience ,
176
235
surcharge : None ,
0 commit comments