# Piano di Refactoring: Migrazione a FusionCache in `MpDataService.cs` ## Obiettivo Migrare la logica di caching manuale (Redis + DB) verso l'utilizzo di `IFusionCache` per implementare un approccio multi-layer (Memory + Redis + DB), standardizzando l'accesso ai dati. ## Strategia di Migrazione - **Metodo Standard**: `GetOrFetchAsync(string operationName, string cacheKey, Func> fetchFunc, TimeSpan expiration, params string[] tagList)`. - **Invalidazione**: Utilizzare i tag tramite `FlushCacheByTagsAsync`. ## Stato Avanzamento ### Fase 1: Analisi e Mapping (Completata) ### Fase 2: Refactoring Metodi di Lettura (Cache-aside) #### ✅ Completati (Migrati con `GetOrFetchAsync`) - `ActionGetReq` - `AnagEventiGeneralAsync` - `AnagStatiCommAsync` - `AnagTipoArtLvAsync` - `ArticleWithDossierAsync` - `ArticoliGetByTipoAsync` - `ArticoliGetSearchAsync` - `ConfigGetAllAsync` - `DossiersGetLastFiltAsync` - `ElencoAziendeAsync` - `ElencoGruppiFaseAsync` - `ElencoLinkAsync` - `FluxLogGetLastFiltAsync` - `FluxLogParetoAsync` - `OperatoriGetFiltAsync` - `POdlGetByOdlAsync` - `POdlListGetFiltAsync` - `TksScoreAsync` - `WipKitFiltAsync` - `MacchineRecipeArchiveAsync` - `MacchineRecipeConfAsync` #### ⏳ In corso / Da Migrare - `AnagEventiGetByMacch` - `AnagKeyValGetAll` - `ConfigGetAll` (Sincrono) - `ConfigTryGet` (Sincrono) - `ConfigTryGetAsync` - `DbDedupStats` - `ElencoRepartiDTO` - `ExpiryReloadParamGet` - `IobInfo` - `ListPODL_ByCodArt` - `MacchineGetFilt` - `MachIobConf` - `MachIobConfVal` - `MseGetAll` - `OdlByBatch` - `OdlGetCurrentAsync` - `OdlListGetFilt` - `OperatoriGetFilt` (Sincrono) - `ParametriGetFilt` - `POdlGetByKey` - `POdlListByKitParent` - `ProcFLStats` - `StatoMacchina` - `TagConfGetKey` - `VocabolarioGetAll` ### Fase 3: Refactoring Metodi di Scrittura e Invalidazione - [ ] `AnagGruppiDelete` - [ ] `AnagGruppiUpsert` - [ ] `ArticoliDeleteRecord` - [ ] `ArticoliUpdateRecord` - [ ] `ConfigResetCache` - [ ] `DossiersDeleteRecord` - [ ] `DossiersTakeParamsSnapshotLast` - [ ] `IstKitDelete` - [ ] `IstKitInsertByWKS` - [ ] `IstKitUpsert` - [ ] `PodlIstKitDelete` - [ ] `POdlDoSetup` - [ ] `POdlUpdateRecipe` - [ ] `POdlUpdateRecord` - [ ] `RecipeSetByPODL` - [ ] `TemplateKitDelete` - [ ] `TemplateKitUpsert` #### Fase 4: Verifica - [ ] Verificare la compilazione della soluzione tramite script PowerShell. - [ ] Controllare che i log (NLog) continuino a riflettere correttamente le operazioni. ## Rischi e Mitigazioni - **Rischio**: Discrepanza nelle chiavi di cache tra vecchio e nuovo sistema. - *Mitigazione*: Utilizzare rigorosamente le costanti in `Utils.redis...` per garantire che le chiavi siano identiche o gestite dal nuovo sistema. - **Rischio**: Errori di serializzazione. - *Mitigazione*: `FusionCache` gestisce la serializzazione, ma è necessario assicurarsi che i tipi di ritorno siano compatibili con le aspettative dei chiamanti.