1111 UnlinkValidationException ,
1212 UpdateValidationException ,
1313)
14+ from openg2p_spar_mapper_core .helpers import ResponseHelper , StrategyHelper
1415from openg2p_spar_mapper_core .services import (
1516 MapperService ,
1617 RequestValidation ,
17- ResponseHelper ,
1818)
1919from openg2p_spar_models .schemas import (
20+ STRATEGY_ID_KEY ,
2021 LinkRequest ,
2122 LinkResponse ,
2223 ResolveRequest ,
@@ -80,6 +81,36 @@ async def link(
8081 # Validate request structure
8182 RequestValidation .get_component ().validate_request (link_request )
8283
84+ for (
85+ single_link_request
86+ ) in link_request .request_body .request_payload .link_request :
87+ # Construct FA from the request FA object
88+ if single_link_request .fa :
89+ # Store strategy_id before constructing FA
90+ strategy_id = single_link_request .fa .strategy_id
91+
92+ # Construct FA using StrategyHelper (converts FA object to string)
93+ constructed_fa_string = (
94+ await StrategyHelper ()
95+ .get_component ()
96+ .construct_fa (single_link_request .fa )
97+ )
98+ # Replace FA object with constructed FA string for storage
99+ single_link_request .fa = constructed_fa_string
100+
101+ # Ensure additional_info contains strategy_id
102+ if not single_link_request .additional_info :
103+ single_link_request .additional_info = []
104+
105+ if (
106+ not single_link_request .additional_info
107+ or STRATEGY_ID_KEY not in single_link_request .additional_info [0 ]
108+ ):
109+ if not single_link_request .additional_info :
110+ single_link_request .additional_info = [{}]
111+ single_link_request .additional_info [0 ][
112+ STRATEGY_ID_KEY
113+ ] = strategy_id
83114 # Process link request
84115 single_link_responses = await self .service .link (link_request )
85116 _logger .debug (f"Single Link Responses: { single_link_responses } " )
@@ -92,16 +123,16 @@ async def link(
92123 return link_response
93124
94125 except RequestValidationException as e :
95- return ResponseHelper .get_component ().construct_error_response (
126+ return ResponseHelper .get_component ().construct_link_error_response (
96127 link_request , e , "rjct.request.validation" , str (e )
97128 )
98129 except LinkValidationException as e :
99- return ResponseHelper .get_component ().construct_error_response (
130+ return ResponseHelper .get_component ().construct_link_error_response (
100131 link_request , e , e .validation_error_type , e .message
101132 )
102133 except Exception as e :
103134 _logger .error (f"Internal server error during link operation: { str (e )} " )
104- return ResponseHelper .get_component ().construct_error_response (
135+ return ResponseHelper .get_component ().construct_link_error_response (
105136 link_request , e , "rjct.internal.error" , "Internal server error"
106137 )
107138
@@ -124,23 +155,23 @@ async def resolve(
124155
125156 # Construct response
126157 resolve_response : ResolveResponse = (
127- ResponseHelper .get_component ().construct_resolve_response (
158+ await ResponseHelper .get_component ().construct_resolve_response (
128159 resolve_request , single_resolve_responses
129160 )
130161 )
131162 return resolve_response
132163
133164 except RequestValidationException as e :
134- return ResponseHelper .get_component ().construct_error_response (
165+ return ResponseHelper .get_component ().construct_resolve_error_response (
135166 resolve_request , e , "rjct.request.validation" , str (e )
136167 )
137168 except ResolveValidationException as e :
138- return ResponseHelper .get_component ().construct_error_response (
169+ return ResponseHelper .get_component ().construct_resolve_error_response (
139170 resolve_request , e , e .validation_error_type , e .message
140171 )
141172 except Exception as e :
142173 _logger .error (f"Internal server error during resolve operation: { str (e )} " )
143- return ResponseHelper .get_component ().construct_error_response (
174+ return ResponseHelper .get_component ().construct_resolve_error_response (
144175 resolve_request , e , "rjct.internal.error" , "Internal server error"
145176 )
146177
@@ -170,16 +201,16 @@ async def unlink(
170201 return unlink_response
171202
172203 except RequestValidationException as e :
173- return ResponseHelper .get_component ().construct_error_response (
204+ return ResponseHelper .get_component ().construct_unlink_error_response (
174205 unlink_request , e , "rjct.request.validation" , str (e )
175206 )
176207 except UnlinkValidationException as e :
177- return ResponseHelper .get_component ().construct_error_response (
208+ return ResponseHelper .get_component ().construct_unlink_error_response (
178209 unlink_request , e , e .validation_error_type , e .message
179210 )
180211 except Exception as e :
181212 _logger .error (f"Internal server error during unlink operation: { str (e )} " )
182- return ResponseHelper .get_component ().construct_error_response (
213+ return ResponseHelper .get_component ().construct_unlink_error_response (
183214 unlink_request , e , "rjct.internal.error" , "Internal server error"
184215 )
185216
@@ -197,6 +228,38 @@ async def update(
197228 # Validate request structure
198229 RequestValidation .get_component ().validate_request (update_request )
199230
231+ for (
232+ single_update_request
233+ ) in update_request .request_body .request_payload .update_request :
234+ # Construct FA from the request FA object
235+ if single_update_request .fa :
236+ # Store strategy_id before constructing FA
237+ strategy_id = single_update_request .fa .strategy_id
238+
239+ # Construct FA using StrategyHelper (converts FA object to string)
240+ constructed_fa_string = (
241+ await StrategyHelper ()
242+ .get_component ()
243+ .construct_fa (single_update_request .fa )
244+ )
245+ # Replace FA object with constructed FA string for storage
246+ single_update_request .fa = constructed_fa_string
247+
248+ # Ensure additional_info contains strategy_id
249+ if not single_update_request .additional_info :
250+ single_update_request .additional_info = []
251+
252+ if (
253+ not single_update_request .additional_info
254+ or STRATEGY_ID_KEY
255+ not in single_update_request .additional_info [0 ]
256+ ):
257+ if not single_update_request .additional_info :
258+ single_update_request .additional_info = [{}]
259+ single_update_request .additional_info [0 ][
260+ STRATEGY_ID_KEY
261+ ] = strategy_id
262+
200263 # Process update request
201264 single_update_responses = await self .service .update (update_request )
202265
@@ -209,15 +272,15 @@ async def update(
209272 return update_response
210273
211274 except RequestValidationException as e :
212- return ResponseHelper .get_component ().construct_error_response (
275+ return ResponseHelper .get_component ().construct_update_error_response (
213276 update_request , e , "rjct.request.validation" , str (e )
214277 )
215278 except UpdateValidationException as e :
216- return ResponseHelper .get_component ().construct_error_response (
279+ return ResponseHelper .get_component ().construct_update_error_response (
217280 update_request , e , e .validation_error_type , e .message
218281 )
219282 except Exception as e :
220283 _logger .error (f"Internal server error during update operation: { str (e )} " )
221- return ResponseHelper .get_component ().construct_error_response (
284+ return ResponseHelper .get_component ().construct_update_error_response (
222285 update_request , e , "rjct.internal.error" , "Internal server error"
223286 )
0 commit comments