Skip to content

Commit f65ca58

Browse files
Merge pull request #66 from PSNAppz/1.2.0
Fixed issues in Mapper APIs
2 parents 35f2ed8 + 3b03315 commit f65ca58

File tree

5 files changed

+86
-299
lines changed

5 files changed

+86
-299
lines changed

openg2p-spar-bene-portal-api/src/openg2p_spar_bene_portal_api/controllers/mapper_controller.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from openg2p_spar_mapper_core.helpers import ResponseHelper, StrategyHelper
1616
from openg2p_spar_mapper_core.services import MapperService, RequestValidation
1717
from openg2p_spar_models.schemas import (
18+
STRATEGY_ID_KEY,
1819
LinkRequest,
1920
LinkResponse,
2021
ResolveRequest,
@@ -24,7 +25,6 @@
2425
UpdateRequest,
2526
UpdateResponse,
2627
)
27-
from openg2p_spar_models.schemas.strategy import STRATEGY_ID_KEY
2828

2929
from ..config import Settings
3030

@@ -95,6 +95,9 @@ async def link(
9595
strategy_id = single_link_request.fa.strategy_id
9696

9797
# Construct FA using StrategyHelper (converts FA object to string)
98+
_logger.info(
99+
f"Constructing FA string from FA object... {single_link_request.fa}"
100+
)
98101
constructed_fa_string = (
99102
await StrategyHelper()
100103
.get_component()
@@ -133,6 +136,9 @@ async def link(
133136
link_request, e, "rjct.request.validation", str(e)
134137
)
135138
except LinkValidationException as e:
139+
_logger.info(
140+
f"Link validation error: {e.validation_error_type} - {e.message}"
141+
)
136142
return ResponseHelper.get_component().construct_link_error_response(
137143
link_request, e, e.validation_error_type, e.message
138144
)

openg2p-spar-mapper-api/src/openg2p_spar_mapper_api/app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,11 @@
99
from openg2p_fastapi_common.app import Initializer as BaseInitializer
1010
from openg2p_fastapi_common.utils.crypto import KeymanagerCryptoHelper
1111
from openg2p_fastapi_partner_auth.jwt_validation_helper import JWTValidationHelper
12+
from openg2p_spar_mapper_core.helpers import ResponseHelper, StrategyHelper
1213
from openg2p_spar_mapper_core.services import (
1314
IdFaMappingValidations,
1415
MapperService,
1516
RequestValidation,
16-
ResponseHelper,
1717
)
1818
from openg2p_spar_models.models import (
1919
IdFaMapping,
@@ -30,6 +30,7 @@ def initialize(self, **kwargs):
3030

3131
IdFaMappingValidations()
3232
RequestValidation()
33+
StrategyHelper()
3334
MapperService()
3435
ResponseHelper()
3536
JWTValidationHelper()

openg2p-spar-mapper-api/src/openg2p_spar_mapper_api/controllers/mapper_controller.py

Lines changed: 77 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@
1111
UnlinkValidationException,
1212
UpdateValidationException,
1313
)
14+
from openg2p_spar_mapper_core.helpers import ResponseHelper, StrategyHelper
1415
from openg2p_spar_mapper_core.services import (
1516
MapperService,
1617
RequestValidation,
17-
ResponseHelper,
1818
)
1919
from 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
)

openg2p-spar-mapper-core/src/openg2p_spar_mapper_core/helpers/response_helper.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,12 @@ async def construct_resolve_response(
9797
deconstructed_responses = []
9898
for response in single_resolve_responses:
9999
deconstructed_fa = None
100-
print("additional_info, fa")
101-
print(response.additional_info, response.fa)
102100
if response.fa and response.additional_info:
103101
deconstructed_fa = (
104102
await StrategyHelper()
105103
.get_component()
106104
.deconstruct_fa(response.fa, response.additional_info)
107105
)
108-
109106
# Create a new response with deconstructed FA
110107
deconstructed_response = SingleResolveResponse(
111108
reference_id=response.reference_id,

0 commit comments

Comments
 (0)