|
1 | | -import logging |
2 | | -from typing import List, Optional |
3 | | - |
4 | | -from fastapi import Query |
5 | 1 | from openg2p_fastapi_common.controller import BaseController |
6 | 2 | from openg2p_spar_mapper_core.services import DfspService |
7 | 3 | from openg2p_spar_models.schemas import ( |
8 | | - DfspProviderSchema, |
9 | | - DfspProviderValueSchema, |
| 4 | + BanksRequest, |
| 5 | + BanksResponse, |
| 6 | + BranchesRequest, |
| 7 | + BranchesResponse, |
| 8 | + WalletServiceProvidersRequest, |
| 9 | + WalletServiceProvidersResponse, |
10 | 10 | ) |
11 | 11 |
|
12 | | -from ..config import Settings |
13 | | - |
14 | | -_config = Settings.get_config() |
15 | | -_logger = logging.getLogger(_config.logging_default_logger_name) |
16 | | - |
17 | 12 |
|
18 | 13 | class DfspController(BaseController): |
19 | 14 | """ |
20 | | - Controller for DFSP (Digital Financial Service Provider) endpoints. |
| 15 | + Controller for Bank, Branch, and WalletServiceProvider endpoints. |
21 | 16 |
|
22 | | - Provides API endpoints for querying provider types and their values. |
| 17 | + Provides API endpoints for querying bank, branch, and wallet service provider data. |
23 | 18 | """ |
24 | 19 |
|
25 | 20 | def __init__(self, **kwargs): |
26 | 21 | super().__init__(**kwargs) |
27 | 22 |
|
28 | | - self.router.tags += ["DFSP"] |
| 23 | + self.router.tags += ["Bank, Branch & Wallet"] |
29 | 24 | self.router.prefix = "/dfsp" |
30 | 25 | self.service = DfspService.get_component() |
31 | 26 |
|
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 |
42 | 28 | 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", |
49 | 35 | ) |
50 | 36 |
|
51 | | - # Provider values endpoints |
| 37 | + # Branch endpoints |
52 | 38 | 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", |
59 | 45 | ) |
60 | 46 |
|
| 47 | + # WalletServiceProvider endpoints |
61 | 48 | 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", |
68 | 55 | ) |
69 | 56 |
|
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: |
80 | 58 | """ |
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. |
98 | 60 |
|
99 | 61 | Args: |
100 | | - provider_type: The provider type (BANK, EMAIL_WALLET, MOBILE_WALLET) |
| 62 | + banks_request: The banks request |
101 | 63 |
|
102 | 64 | Returns: |
103 | | - DfspProviderSchema for the requested type |
| 65 | + BanksResponse with list of banks |
104 | 66 | """ |
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) |
125 | 68 |
|
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: |
132 | 72 | """ |
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. |
151 | 74 |
|
152 | 75 | Args: |
153 | | - code: The provider value code |
| 76 | + branches_request: The branches request |
154 | 77 |
|
155 | 78 | Returns: |
156 | | - DfspProviderValueSchema for the requested code |
| 79 | + BranchesResponse with list of branches |
157 | 80 | """ |
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: |
170 | 86 | """ |
171 | | - Get direct children of a provider value. |
| 87 | + Fetch all wallet service providers. |
172 | 88 |
|
173 | 89 | Args: |
174 | | - parent_id: Parent provider value ID |
| 90 | + wsp_request: The wallet service providers request |
175 | 91 |
|
176 | 92 | Returns: |
177 | | - List of child provider values |
| 93 | + WalletServiceProvidersResponse with list of wallet service providers |
178 | 94 | """ |
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