Skip to content

Commit b771084

Browse files
Merge pull request #6 from tahzeer/3.0
[G2P-4236] Update standardized schemas and related changes
2 parents 73e00c3 + 4e6a5fa commit b771084

File tree

7 files changed

+136
-100
lines changed

7 files changed

+136
-100
lines changed

openg2p-pbms-staff-portal-api/src/openg2p_pbms_staff_portal_api/controllers/beneficiary_search.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from openg2p_bg_task_models.schemas import (
55
BeneficiarySearchRequest,
66
BeneficiarySearchResponse,
7-
BeneficiarySearchResponsePayload,
87
)
98
from openg2p_fastapi_common.controller import BaseController
109

@@ -35,14 +34,11 @@ async def search_beneficiaries(
3534
_logger.debug("Beneficiary Search Request: %s", beneficiary_search_request)
3635

3736
try:
38-
beneficiary_search_response_payload: BeneficiarySearchResponsePayload = (
37+
beneficiary_search_response: BeneficiarySearchResponse = (
3938
await self.beneficiary_search_service.search_beneficiaries(
40-
beneficiary_search_request.message
39+
beneficiary_search_request
4140
)
4241
)
43-
beneficiary_search_response: BeneficiarySearchResponse = await self.beneficiary_search_service.construct_beneficiary_search_success_response(
44-
beneficiary_search_request, beneficiary_search_response_payload
45-
)
4642
_logger.info("Beneficiaries retrieved successfully")
4743
_logger.debug(
4844
"Beneficiary Search Response: %s", beneficiary_search_response

openg2p-pbms-staff-portal-api/src/openg2p_pbms_staff_portal_api/controllers/disbursement.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ async def disbursement_envelope(
4949

5050
try:
5151
disbursement_envelope_response_payload: DisbursementEnvelopeResponsePayload = await self.disbursement_envelope_service.disbursement_envelope(
52-
disbursement_envelope_request.message
52+
disbursement_envelope_request.request_body.request_payload
5353
)
5454
disbursement_envelope_response: DisbursementEnvelopeResponse = await self.disbursement_envelope_service.construct_disbursement_envelope_success_response(
5555
disbursement_envelope_request, disbursement_envelope_response_payload
@@ -74,7 +74,7 @@ async def disbursement_batch(
7474
try:
7575
disbursement_batch_response_payload: DisbursementBatchResponsePayload = (
7676
await self.disbursement_batch_service.disbursement_batch(
77-
disbursement_batch_request.message
77+
disbursement_batch_request.request_body.request_payload
7878
)
7979
)
8080
disbursement_batch_response: DisbursementBatchResponse = await self.disbursement_batch_service.construct_disbursement_batch_success_response(

openg2p-pbms-staff-portal-api/src/openg2p_pbms_staff_portal_api/controllers/summary.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import logging
22

33
from openg2p_bg_task_models.errors import BGTaskException
4-
from openg2p_bg_task_models.models import BeneficiaryListSummary
54
from openg2p_bg_task_models.schemas import (
65
SummaryRequest,
76
SummaryResponse,
7+
SummaryResponsePayload,
88
)
99
from openg2p_fastapi_common.controller import BaseController
1010

@@ -33,12 +33,14 @@ async def get_summary(self, summary_request: SummaryRequest) -> SummaryResponse:
3333
_logger.debug("Beneficiary List Summary Request: %s", summary_request)
3434

3535
try:
36-
beneficiary_list_summary: BeneficiaryListSummary = (
37-
await self.summary_service.get_summary(summary_request.message)
36+
summary_response_payload: SummaryResponsePayload = (
37+
await self.summary_service.get_summary(
38+
summary_request.request_body.request_payload
39+
)
3840
)
3941
summary_response: SummaryResponse = (
4042
await self.summary_service.construct_summary_success_response(
41-
summary_request, beneficiary_list_summary
43+
summary_request, summary_response_payload
4244
)
4345
)
4446
_logger.info("Eligibility summary retrieved successfully")

openg2p-pbms-staff-portal-api/src/openg2p_pbms_staff_portal_api/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# ruff: noqa: I001
44

5-
from .app import Initializer
5+
from openg2p_pbms_staff_portal_api.app import Initializer
66
from openg2p_fastapi_common.ping import PingInitializer
77

88
initializer = Initializer()
Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import logging
2+
import math
23
from datetime import datetime
34

45
from openg2p_bg_task_models.schemas import (
56
BeneficiarySearchRequest,
6-
BeneficiarySearchRequestPayload,
77
BeneficiarySearchResponse,
8+
BeneficiarySearchResponseBody,
89
BeneficiarySearchResponsePayload,
910
)
1011
from openg2p_bg_task_registry_adapters.factory import RegistryFactory
1112
from openg2p_bg_task_registry_adapters.interface import RegistryInterface
12-
from openg2p_fastapi_common.service import BaseService
13-
from openg2p_g2pconnect_common_lib.schemas import (
14-
StatusEnum,
15-
SyncResponseHeader,
13+
from openg2p_fastapi_common.schemas import (
14+
G2PPaginationResponse,
15+
G2PResponseHeader,
16+
G2PResponseStatus,
1617
)
18+
from openg2p_fastapi_common.service import BaseService
1719
from sqlalchemy.ext.asyncio import async_sessionmaker
1820

1921
from ..config import Settings
@@ -26,8 +28,13 @@
2628

2729
class BeneficiarySearchService(BaseService):
2830
async def search_beneficiaries(
29-
self, beneficiary_search_request_payload: BeneficiarySearchRequestPayload
30-
) -> BeneficiarySearchResponsePayload:
31+
self, beneficiary_search_request: BeneficiarySearchRequest
32+
) -> BeneficiarySearchResponse:
33+
beneficiary_search_request_payload = (
34+
beneficiary_search_request.request_body.request_payload
35+
)
36+
pagination_request = beneficiary_search_request.request_body.pagination_request
37+
3138
session_maker = async_sessionmaker(
3239
bind=_engine.get("db_engine_bg_task"), expire_on_commit=False
3340
)
@@ -42,52 +49,63 @@ async def search_beneficiaries(
4249
beneficiary_search_request_payload.target_registry
4350
)
4451
)
45-
beneficiary_search_response_payload: BeneficiarySearchResponsePayload = await registry_interface.search_beneficiaries(
52+
(
53+
beneficiary_search_response_payload,
54+
total_count,
55+
) = await registry_interface.search_beneficiaries(
4656
session,
4757
sr_session,
4858
beneficiary_search_request_payload.beneficiary_list_id,
4959
beneficiary_search_request_payload.target_registry,
50-
beneficiary_search_request_payload.search_query,
51-
beneficiary_search_request_payload.page,
52-
beneficiary_search_request_payload.page_size,
53-
beneficiary_search_request_payload.order_by,
60+
pagination_request.search_text,
61+
pagination_request.current_page,
62+
pagination_request.page_size,
63+
pagination_request.sort_by,
64+
)
65+
66+
# Build pagination response
67+
page_size = pagination_request.page_size if pagination_request else 10
68+
number_of_pages = (
69+
math.ceil(total_count / page_size) if page_size > 0 else 0
70+
)
71+
pagination_response = G2PPaginationResponse(
72+
number_of_items=total_count,
73+
number_of_pages=number_of_pages,
74+
)
75+
76+
return BeneficiarySearchResponse(
77+
response_header=G2PResponseHeader(
78+
request_id=beneficiary_search_request.request_header.request_id,
79+
response_timestamp=datetime.now(),
80+
response_status=G2PResponseStatus.SUCCESS,
81+
),
82+
response_body=BeneficiarySearchResponseBody(
83+
pagination_response=pagination_response,
84+
response_payload=beneficiary_search_response_payload,
85+
),
5486
)
55-
return beneficiary_search_response_payload
5687

5788
except Exception as e:
5889
_logger.exception("Error searching for beneficiaries.")
5990
raise e
6091

61-
async def construct_beneficiary_search_success_response(
62-
self,
63-
beneficiary_search_request: BeneficiarySearchRequest,
64-
beneficiary_search_response_payload: BeneficiarySearchResponsePayload,
65-
) -> BeneficiarySearchResponse:
66-
response = BeneficiarySearchResponse(
67-
header=SyncResponseHeader(
68-
message_id=beneficiary_search_request.header.message_id,
69-
message_ts=datetime.now().isoformat(),
70-
action=beneficiary_search_request.header.action,
71-
status=StatusEnum.succ,
72-
),
73-
message=beneficiary_search_response_payload,
74-
)
75-
return response
76-
7792
async def construct_beneficiary_search_error_response(
7893
self,
7994
beneficiary_search_request: BeneficiarySearchRequest,
8095
error_code: str,
8196
) -> BeneficiarySearchResponse:
8297
response = BeneficiarySearchResponse(
83-
header=SyncResponseHeader(
84-
message_id=beneficiary_search_request.header.message_id,
85-
message_ts=datetime.now().isoformat(),
86-
action=beneficiary_search_request.header.action,
87-
status=StatusEnum.rjct,
88-
status_reason_message=error_code,
98+
response_header=G2PResponseHeader(
99+
request_id=beneficiary_search_request.request_header.request_id,
100+
response_timestamp=datetime.now(),
101+
response_status=G2PResponseStatus.ERROR,
102+
response_error_code=error_code,
103+
),
104+
response_body=BeneficiarySearchResponseBody(
105+
response_payload=BeneficiarySearchResponsePayload(
106+
beneficiary_count=0, beneficiaries=[]
107+
),
89108
),
90-
message={},
91109
)
92110

93111
return response

openg2p-pbms-staff-portal-api/src/openg2p_pbms_staff_portal_api/services/disbursement.py

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@
88
DisbursementBatchRequest,
99
DisbursementBatchRequestPayload,
1010
DisbursementBatchResponse,
11+
DisbursementBatchResponseBody,
1112
DisbursementBatchResponsePayload,
1213
DisbursementEnvelopeRequest,
1314
DisbursementEnvelopeRequestPayload,
1415
DisbursementEnvelopeResponse,
16+
DisbursementEnvelopeResponseBody,
1517
DisbursementEnvelopeResponsePayload,
1618
)
17-
from openg2p_fastapi_common.service import BaseService
18-
from openg2p_g2pconnect_common_lib.schemas import (
19-
StatusEnum,
20-
SyncResponseHeader,
19+
from openg2p_fastapi_common.schemas import (
20+
G2PResponseHeader,
21+
G2PResponseStatus,
2122
)
23+
from openg2p_fastapi_common.service import BaseService
2224
from sqlalchemy.ext.asyncio import async_sessionmaker
2325

2426
from ..config import Settings
@@ -73,13 +75,14 @@ async def construct_disbursement_envelope_success_response(
7375
disbursement_envelope_response_payload: DisbursementEnvelopeResponsePayload,
7476
) -> DisbursementEnvelopeResponse:
7577
disbursement_envelope_response = DisbursementEnvelopeResponse(
76-
header=SyncResponseHeader(
77-
message_id=disbursement_envelope_request.header.message_id,
78-
message_ts=datetime.now().isoformat(),
79-
action=disbursement_envelope_request.header.action,
80-
status=StatusEnum.succ,
78+
response_header=G2PResponseHeader(
79+
request_id=disbursement_envelope_request.request_header.request_id,
80+
response_timestamp=datetime.now(),
81+
response_status=G2PResponseStatus.SUCCESS,
82+
),
83+
response_body=DisbursementEnvelopeResponseBody(
84+
response_payload=disbursement_envelope_response_payload,
8185
),
82-
message=disbursement_envelope_response_payload,
8386
)
8487
return disbursement_envelope_response
8588

@@ -89,14 +92,18 @@ async def construct_disbursement_envelope_error_response(
8992
error_code: str,
9093
) -> DisbursementEnvelopeResponse:
9194
disbursement_envelope_response = DisbursementEnvelopeResponse(
92-
header=SyncResponseHeader(
93-
message_id=disbursement_envelope_request.header.message_id,
94-
message_ts=datetime.now().isoformat(),
95-
action=disbursement_envelope_request.header.action,
96-
status=StatusEnum.rjct,
97-
status_reason_message=error_code,
95+
response_header=G2PResponseHeader(
96+
request_id=disbursement_envelope_request.request_header.request_id,
97+
response_timestamp=datetime.now(),
98+
response_status=G2PResponseStatus.ERROR,
99+
response_error_code=error_code,
100+
),
101+
response_body=DisbursementEnvelopeResponseBody(
102+
response_payload=DisbursementEnvelopeResponsePayload(
103+
beneficiary_list_id=disbursement_envelope_request.request_payload.beneficiary_list_id,
104+
disbursement_envelopes=[],
105+
),
98106
),
99-
message={},
100107
)
101108
return disbursement_envelope_response
102109

@@ -143,27 +150,31 @@ async def construct_disbursement_batch_success_response(
143150
disbursement_batch_response_payload: DisbursementBatchResponsePayload,
144151
) -> DisbursementBatchResponse:
145152
disbursement_batch_response = DisbursementBatchResponse(
146-
header=SyncResponseHeader(
147-
message_id=disbursement_batch_request.header.message_id,
148-
message_ts=datetime.now().isoformat(),
149-
action=disbursement_batch_request.header.action,
150-
status=StatusEnum.succ,
153+
response_header=G2PResponseHeader(
154+
request_id=disbursement_batch_request.request_header.request_id,
155+
response_timestamp=datetime.now(),
156+
response_status=G2PResponseStatus.SUCCESS,
157+
),
158+
response_body=DisbursementBatchResponseBody(
159+
response_payload=disbursement_batch_response_payload,
151160
),
152-
message=disbursement_batch_response_payload,
153161
)
154162
return disbursement_batch_response
155163

156164
async def construct_disbursement_batch_error_response(
157165
self, disbursement_batch_request: DisbursementBatchRequest, error_code: str
158166
) -> DisbursementBatchResponse:
159167
disbursement_batch_response = DisbursementBatchResponse(
160-
header=SyncResponseHeader(
161-
message_id=disbursement_batch_request.header.message_id,
162-
message_ts=datetime.now().isoformat(),
163-
action=disbursement_batch_request.header.action,
164-
status=StatusEnum.rjct,
165-
status_reason_message=error_code,
168+
response_header=G2PResponseHeader(
169+
request_id=disbursement_batch_request.request_header.request_id,
170+
response_timestamp=datetime.now(),
171+
response_status=G2PResponseStatus.ERROR,
172+
response_error_code=error_code,
173+
),
174+
response_body=DisbursementBatchResponseBody(
175+
response_payload=DisbursementBatchResponsePayload(
176+
disbursement_batches=[],
177+
),
166178
),
167-
message={},
168179
)
169180
return disbursement_batch_response

0 commit comments

Comments
 (0)