You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.7 KiB
4.7 KiB
Configuration API - Status Update
Question Asked
"What about the API call to get the configuration? I don't see any API call? API: Common_Config_GetByIP"
Answer
✅ The API Call EXISTS!
Location: /lib/repositories/screen_details_repo.dart
Method: getGlobalScreenConfigurations() (lines 41-70)
Endpoint: ApiConstants.commonConfigGet → https://ms.hmg.com/nscapi/api/PatientCall/Common_Config_GetByIP
Code:
Future<GlobalConfigurationsModel?> getGlobalScreenConfigurations({required String ipAddress}) async {
try {
var params = {
"ipAddress": ipAddress.toString(),
"apiKey": AppConstants.apiKey.toString(),
};
GenericRespModel genericModel = await apiClientInstance.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConstants.commonConfigGet, // ← Uses Common_Config_GetByIP
params,
);
// ... returns GlobalConfigurationsModel
} catch (e) {
// Error handling
}
}
⚠️ The Problem
The try-catch was commented out in the original code, which meant:
- CORS errors wouldn't be caught properly
- Errors would bubble up and crash initialization
- No clear error messages for debugging
✅ What Was Fixed
- Uncommented the try-catch block
- Added CORS-specific error detection
- Added comprehensive error logging
Now the code:
- Catches CORS errors gracefully
- Logs detailed error information
- Shows user-friendly error messages
- Detects if the error is CORS-related
🔍 When Is This Called?
Call Chain:
Splash Screen
└─> waitForIPAndInitializeConfigVM()
└─> initializeScreenConfigVM()
└─> getGlobalConfigurationsByIP()
└─> screenDetailsRepo.getGlobalScreenConfigurations()
└─> API Call: Common_Config_GetByIP
Location in ViewModel: /lib/view_models/screen_config_view_model.dart
Future<void> getGlobalConfigurationsByIP() async {
GlobalConfigurationsModel? response = await screenDetailsRepo
.getGlobalScreenConfigurations(ipAddress: currentScreenIP);
// ...
}
❌ Current Issue: CORS
On Web:
✅ IP: 10.71.50.53 configured
✅ Initialization started
❌ API call blocked by browser CORS policy
❌ Error: ClientException: Failed to fetch
Why it fails on web:
- Browser blocks the request to
https://ms.hmg.com - Server doesn't have CORS headers configured
- Same issue affects ALL API endpoints:
/PatientCallingHub(SignalR)/api/PatientCall/Common_Config_GetByIP(Configuration)/api/PatientCall/WeatherForecast_GetBy5Days(Weather)/api/PatientCall/PrayerTime_Today(Prayer)/api/PatientCall/RssFeed_Get(RSS Feed)- And all other REST APIs
Why it works on mobile:
- Native apps don't have CORS restrictions
- Only web browsers enforce CORS policy
📋 What Needs to Be Done
Backend team must:
- Add CORS configuration to ASP.NET Core app
- Apply CORS policy to ALL endpoints:
- SignalR Hub
- API Controllers
- All routes under
/api/*
- Test with browser console (see CORS_ISSUE_SOLUTION.md)
Complete instructions: See CORS_ISSUE_SOLUTION.md
🧪 How to Test Configuration API
In browser console:
fetch('https://ms.hmg.com/nscapi/api/PatientCall/Common_Config_GetByIP', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
ipAddress: '10.71.50.53',
apiKey: 'EE17D21C7943485D9780223CCE55DCE5'
})
})
.then(r => {
console.log('✅ Config API CORS working!');
return r.json();
})
.then(data => console.log('Response:', data))
.catch(e => console.error('❌ Config API CORS blocked:', e));
Expected results:
- ❌ Before CORS config: "Failed to fetch" error
- ✅ After CORS config: JSON response with configuration data
📊 Summary
| Component | Status | Notes |
|---|---|---|
| API Call Exists | ✅ Yes | In screen_details_repo.dart |
| Called on Startup | ✅ Yes | Via getGlobalConfigurationsByIP() |
| Works on Mobile | ✅ Yes | Native app, no CORS |
| Works on Web | ❌ No | Blocked by CORS |
| Error Handling | ✅ Fixed | Uncommented try-catch, added CORS detection |
| Solution | ⚠️ Pending | Backend needs CORS configuration |
🎯 Next Steps
- Share CORS_ISSUE_SOLUTION.md with backend team
- Backend adds CORS headers to ALL API endpoints
- Test using browser console commands above
- Once working, deploy web app
Date: August 2, 2026
Status:
- ✅ API call found and documented
- ✅ Error handling improved
- ⚠️ CORS configuration required for web deployment