Skip to content

Commit 35f2ed8

Browse files
Merge pull request #65 from PSNAppz/1.2.0
Simplify DFSP APIs
2 parents d97a6c3 + f6d48ca commit 35f2ed8

File tree

10 files changed

+545
-693
lines changed

10 files changed

+545
-693
lines changed

openg2p-spar-bene-portal-api/src/openg2p_spar_bene_portal_api/app.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
RequestValidation,
1616
)
1717
from openg2p_spar_models.models import (
18-
DfspProvider,
19-
DfspProviderValue,
18+
Bank,
19+
Branch,
2020
IdFaMapping,
2121
Strategy,
22+
WalletServiceProvider,
2223
)
2324

2425
from .controllers import DfspController, MapperController
@@ -45,9 +46,10 @@ def migrate_database(self, args):
4546

4647
async def migrate():
4748
_logger.info("Migrating database")
49+
await Bank.create_migrate()
50+
await Branch.create_migrate()
51+
await WalletServiceProvider.create_migrate()
4852
await IdFaMapping.create_migrate()
4953
await Strategy.create_migrate()
50-
await DfspProvider.create_migrate()
51-
await DfspProviderValue.create_migrate()
5254

5355
asyncio.run(migrate())
Lines changed: 50 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -1,186 +1,95 @@
1-
import logging
2-
from typing import List, Optional
3-
4-
from fastapi import Query
51
from openg2p_fastapi_common.controller import BaseController
62
from openg2p_spar_mapper_core.services import DfspService
73
from openg2p_spar_models.schemas import (
8-
DfspProviderSchema,
9-
DfspProviderValueSchema,
4+
BanksRequest,
5+
BanksResponse,
6+
BranchesRequest,
7+
BranchesResponse,
8+
WalletServiceProvidersRequest,
9+
WalletServiceProvidersResponse,
1010
)
1111

12-
from ..config import Settings
13-
14-
_config = Settings.get_config()
15-
_logger = logging.getLogger(_config.logging_default_logger_name)
16-
1712

1813
class DfspController(BaseController):
1914
"""
20-
Controller for DFSP (Digital Financial Service Provider) endpoints.
15+
Controller for Bank, Branch, and WalletServiceProvider endpoints.
2116
22-
Provides API endpoints for querying provider types and their values.
17+
Provides API endpoints for querying bank, branch, and wallet service provider data.
2318
"""
2419

2520
def __init__(self, **kwargs):
2621
super().__init__(**kwargs)
2722

28-
self.router.tags += ["DFSP"]
23+
self.router.tags += ["Bank, Branch & Wallet"]
2924
self.router.prefix = "/dfsp"
3025
self.service = DfspService.get_component()
3126

32-
# Provider endpoints
33-
self.router.add_api_route(
34-
"/providers",
35-
self.get_all_providers,
36-
responses={200: {"model": List[DfspProviderSchema]}},
37-
methods=["GET"],
38-
summary="Get all provider types",
39-
description="Returns all available provider types (BANK, EMAIL_WALLET, MOBILE_WALLET)",
40-
)
41-
27+
# Bank endpoints
4228
self.router.add_api_route(
43-
"/providers/{provider_type}",
44-
self.get_provider_by_type,
45-
responses={200: {"model": DfspProviderSchema}},
46-
methods=["GET"],
47-
summary="Get provider by type",
48-
description="Returns a specific provider type configuration",
29+
"/fetch-banks",
30+
self.fetch_banks,
31+
responses={200: {"model": BanksResponse}},
32+
methods=["POST"],
33+
summary="Fetch all banks",
34+
description="Returns all available banks",
4935
)
5036

51-
# Provider values endpoints
37+
# Branch endpoints
5238
self.router.add_api_route(
53-
"/providers/{provider_type}/values",
54-
self.get_provider_values,
55-
responses={200: {"model": List[DfspProviderValueSchema]}},
56-
methods=["GET"],
57-
summary="Get provider values",
58-
description="Returns provider values (e.g., banks, branches, wallets) filtered by type and optional parent",
39+
"/fetch-branches",
40+
self.fetch_branches,
41+
responses={200: {"model": BranchesResponse}},
42+
methods=["POST"],
43+
summary="Fetch all branches",
44+
description="Returns all available branches, optionally filtered by bank_id",
5945
)
6046

47+
# WalletServiceProvider endpoints
6148
self.router.add_api_route(
62-
"/values/{code}",
63-
self.get_provider_value_by_code,
64-
responses={200: {"model": DfspProviderValueSchema}},
65-
methods=["GET"],
66-
summary="Get provider value by code",
67-
description="Returns a specific provider value by its code",
49+
"/fetch-wallet-service-providers",
50+
self.fetch_wallet_service_providers,
51+
responses={200: {"model": WalletServiceProvidersResponse}},
52+
methods=["POST"],
53+
summary="Fetch all wallet service providers",
54+
description="Returns all available wallet service providers",
6855
)
6956

70-
self.router.add_api_route(
71-
"/values/{parent_id}/children",
72-
self.get_children,
73-
responses={200: {"model": List[DfspProviderValueSchema]}},
74-
methods=["GET"],
75-
summary="Get children of a provider value",
76-
description="Returns direct children of a provider value (e.g., branches of a bank)",
77-
)
78-
79-
async def get_all_providers(self) -> List[DfspProviderSchema]:
57+
async def fetch_banks(self, banks_request: BanksRequest) -> BanksResponse:
8058
"""
81-
Get all provider types.
82-
83-
Returns:
84-
List of all provider types
85-
"""
86-
try:
87-
_logger.debug("Fetching all provider types")
88-
providers = await self.service.get_all_providers()
89-
_logger.debug(f"Found {len(providers)} provider types")
90-
return providers
91-
except Exception as e:
92-
_logger.error(f"Error fetching providers: {str(e)}")
93-
raise
94-
95-
async def get_provider_by_type(self, provider_type: str) -> DfspProviderSchema:
96-
"""
97-
Get a provider by type.
59+
Fetch all banks.
9860
9961
Args:
100-
provider_type: The provider type (BANK, EMAIL_WALLET, MOBILE_WALLET)
62+
banks_request: The banks request
10163
10264
Returns:
103-
DfspProviderSchema for the requested type
65+
BanksResponse with list of banks
10466
"""
105-
try:
106-
_logger.debug(f"Fetching provider type: {provider_type}")
107-
provider = await self.service.get_provider_by_type(provider_type)
108-
if not provider:
109-
_logger.warning(f"Provider type not found: {provider_type}")
110-
return {"error": f"Provider type '{provider_type}' not found"}
111-
return provider
112-
except Exception as e:
113-
_logger.error(f"Error fetching provider type {provider_type}: {str(e)}")
114-
raise
115-
116-
async def get_provider_values(
117-
self,
118-
provider_type: str,
119-
parent_id: Optional[int] = Query(
120-
None, description="Optional parent ID for filtering"
121-
),
122-
) -> List[DfspProviderValueSchema]:
123-
"""
124-
Get provider values filtered by type and optional parent.
67+
return await self.service.fetch_banks(banks_request)
12568

126-
Args:
127-
provider_type: The provider type (BANK, EMAIL_WALLET, MOBILE_WALLET)
128-
parent_id: Optional parent ID (for branches under a bank)
129-
130-
Returns:
131-
List of provider values matching the criteria
69+
async def fetch_branches(
70+
self, branches_request: BranchesRequest
71+
) -> BranchesResponse:
13272
"""
133-
try:
134-
_logger.debug(
135-
f"Fetching provider values for type: {provider_type}, parent_id: {parent_id}"
136-
)
137-
values = await self.service.get_provider_values(
138-
provider_type=provider_type, parent_id=parent_id
139-
)
140-
_logger.debug(f"Found {len(values)} provider values")
141-
return values
142-
except Exception as e:
143-
_logger.error(
144-
f"Error fetching provider values for {provider_type}: {str(e)}"
145-
)
146-
raise
147-
148-
async def get_provider_value_by_code(self, code: str) -> DfspProviderValueSchema:
149-
"""
150-
Get a provider value by code.
73+
Fetch all branches, optionally filtered by bank_id.
15174
15275
Args:
153-
code: The provider value code
76+
branches_request: The branches request
15477
15578
Returns:
156-
DfspProviderValueSchema for the requested code
79+
BranchesResponse with list of branches
15780
"""
158-
try:
159-
_logger.debug(f"Fetching provider value by code: {code}")
160-
value = await self.service.get_provider_value_by_code(code)
161-
if not value:
162-
_logger.warning(f"Provider value not found: {code}")
163-
return {"error": f"Provider value '{code}' not found"}
164-
return value
165-
except Exception as e:
166-
_logger.error(f"Error fetching provider value {code}: {str(e)}")
167-
raise
168-
169-
async def get_children(self, parent_id: int) -> List[DfspProviderValueSchema]:
81+
return await self.service.fetch_branches(branches_request)
82+
83+
async def fetch_wallet_service_providers(
84+
self, wsp_request: WalletServiceProvidersRequest
85+
) -> WalletServiceProvidersResponse:
17086
"""
171-
Get direct children of a provider value.
87+
Fetch all wallet service providers.
17288
17389
Args:
174-
parent_id: Parent provider value ID
90+
wsp_request: The wallet service providers request
17591
17692
Returns:
177-
List of child provider values
93+
WalletServiceProvidersResponse with list of wallet service providers
17894
"""
179-
try:
180-
_logger.debug(f"Fetching children for parent_id: {parent_id}")
181-
children = await self.service.get_children(parent_id)
182-
_logger.debug(f"Found {len(children)} children")
183-
return children
184-
except Exception as e:
185-
_logger.error(f"Error fetching children for {parent_id}: {str(e)}")
186-
raise
95+
return await self.service.fetch_wallet_service_providers(wsp_request)

0 commit comments

Comments
 (0)