Debito Tecnico e Aree di Miglioramento¶
Obiettivo¶
Questo documento raccoglie il debito tecnico noto, i TODO aperti e i punti di attenzione architetturali e funzionali all'interno della codebase mobile di HapGree, utili per pianificare le future attività di refactoring e completamento.
Attività ad Alta Priorità¶
1. Pagina di Join Group via Route dedicata¶
In lib/Routing/Routes/GroupsRoutes.dart, la rotta /group/join/:tag restituisce attualmente un Container() vuoto:
- La partecipazione a un gruppo tramite codice/tag avviene al momento solo tramite overlay e pop-up (JoinGroupScrollPopUp, JoinGroupWithTagScrollPopUp);
- Azione richiesta: completare la vista dedicata per il deep link diretto GroupsRoutes.joinGroup.
2. Scanner Scontrini Alimentari (Food OCR) e integrazione OpenFoodFacts¶
Nel ReceiptScannerViewModel.dart (lib/viewModel/user/category/food/):
- La chiamata diretta a OpenFoodFacts è temporaneamente disattivata a causa di rate limiting/blocchi, ed è presente un fallback con FoodItemEntity di test;
- Azione richiesta: stabilizzare il parsing OCR e integrare un meccanismo robusto di caching o proxy backend per le ricerche su OpenFoodFacts.
3. Allineamento dei parametri di default nel tracking mobilità¶
In AutomaticTrackingViewModel.dart (lib/viewModel/user/category/DrivingAnalysis/), durante la sincronizzazione verso il backend in _loadAllSavedSessionsToDatabase():
- I campi travelReasonType e vehicleType vengono impostati con valori di default (work e dieselCar);
- Azione richiesta: propagare i parametri reali selezionati dall'utente o configurati nel profilo per evitare discrepanze nelle stime di emissione.
4. Fattore di conversione compensazione parametrico¶
In FreeCompensationViewModel.dart (lib/viewModel/user/compensation/):
- Il rapporto di conversione monetaria (1 EUR = 10 kg CO2) è attualmente hardcoded nel client;
- Azione richiesta: esporre il tasso di conversione tramite un endpoint di configurazione backend per consentire variazioni di pricing senza rilasci dell'app mobile.
5. Dettaglio Certificati di Compensazione¶
In CertificateDetailPage.dart (lib/view/user/setting/):
- Alcuni attributi secondari del progetto (location, standard, stima annua) usano fallback locali legati al project_id;
- Azione richiesta: estendere il DTO del certificato nelle OpenAPI per rendere tutti i metadati del progetto interamente pilotati dal backend.
Attività a Media Priorità¶
6. Standardizzazione della gestione configurazioni e segreti¶
- Le chiavi e i parametri di configurazione sono distribuiti tra
lib/Configuration.dart,AndroidManifest.xml,Info.pliste file Firebase; - Azione richiesta: valutare l'introduzione di uno schema unificato per la gestione delle variabili d'ambiente (es.
--dart-define/ CI environment injection).
7. Gestione della Google Maps API Key¶
- La chiave Google Maps è inserita nei file nativi (
AndroidManifest.xmleInfo.plist); - Azione richiesta: verificare che sulla Google Cloud Console siano sempre attive le restrizioni per package name (Android SHA-1) e Bundle ID (iOS).
8. Evoluzione dello storage locale per la coda viaggi¶
- Il tracking automatico utilizza
SharedPreferences(chiavedriving_history) come buffer di sincronizzazione per i viaggi offline; - Azione richiesta: per carichi di tracciamento intensivi o sessioni prolungate, valutare la migrazione a un database locale (es. SQLite / Isar) per garantire transazionalità avanzata.
9. Pulizia dei log di debug¶
- Nel modulo di tracking e in alcune ViewModel sono presenti istruzioni
print(...)introdotte durante lo sviluppo; - Azione richiesta: sostituire i
printcon un logger strutturato per ambiente (attivo solo in debug/local).
Riepilogo dei TODO aperti nel codice¶
| File | Descrizione attività |
|---|---|
lib/viewModel/user/category/food/ReceiptScannerViewModel.dart |
Ripristino e ottimizzazione ricerca OpenFoodFacts |
lib/viewModel/user/groups/groupOwnership/GroupOwnershipViewModel.dart |
Implementazione completa del metodo dispose |
lib/viewModel/user/groups/joinGroup/JoinGroupConfermationViewModel.dart |
Implementazione completa del metodo dispose |
lib/viewModel/admin/tips/DeleteTipsViewModel.dart |
Implementazione completa del metodo dispose |
lib/view/admin/dashboard/Dashboard.dart |
Completamento widget search box |
lib/view/admin/nav_bar_config/NavBarAdminConfig.dart |
Aggiunta tab secondarie per amministrazione |
lib/Services/Category/Receipt/createReceipt/implementation/PostSaveReceiptService.dart |
Completamento implementazione saveReceipt |
lib/Services/Category/Receipt/createReceipt/implementations/HapGreeCreateReceiptService.dart |
Completamento implementazione makeRequest |
Aree con Mock o Dati Placeholder¶
| File | Note |
|---|---|
lib/view/user/setting/NotificationSocialAndGroupInvitation.dart |
Dati grafici di anteprima per inviti social |
lib/view/user/setting/CertificateDetailPage.dart |
Dettagli informativi estesi per progetti di compensazione |
lib/view/user/setting/CompensationCertificatesPage.dart |
Modello di visualizzazione basato sulla struttura API |
lib/features/onboarding/onboarding_slide.dart |
Testi e asset delle schermate introduttive |
Raccomandazioni per le Prossime Iterazioni¶
- Flusso Gruppi: Completare la vista dedicata per il deep link
/group/join/:tag. - Scanner Scontrini: Stabilizzare l'integrazione OCR con OpenFoodFacts o delegare la ricerca al backend.
- Parametri di Guida e Compensazione: Rimuovere i default statici per tipo veicolo e tasso di cambio CO2.
- Toolchain e CI/CD: Automatizzare la generazione del client OpenAPI e la firma delle build tramite pipeline CI.