7c9406682c
- pulizia vecchio controller/repository globale - pulizia MpDataService - aggiunta file readme progetto - update refactor progetto e config
90 lines
3.9 KiB
Markdown
90 lines
3.9 KiB
Markdown
# MP.SPEC
|
|
|
|
MAPO SPEC: WebApp / Sito in versione dotNetCore 8 per la gestione del MES MAPO in particolare per le gestioni SPECiali (ina ttesa di finire di migrare SITE e ADM).
|
|
|
|
Comprende funzionalità amministrative avanzate e funzionalità standard.
|
|
|
|
## Sezioni Principali
|
|
|
|
Sono gestiti
|
|
* Articoli
|
|
* Operatori
|
|
* Assegnazione Operatori/Macchine a reparti
|
|
* PODL (Promesse ODL) prima della produzione
|
|
* ODL (Ordini di lavoro) legate ad effettive attività di produzione
|
|
* Gestione speciale dei KIT
|
|
* Gestione Dossier (es caso Baglietto)
|
|
* Gestione Ricette (tramite dossier)
|
|
* Gestione Parametri macchina
|
|
* Gestione giacenze magazzino (ove gestite)
|
|
|
|
Ci sono anche alcune pagine speciali di admin (ad esempio FluxLogStatus, usata per deduplicare i dati di FluxLog)
|
|
|
|
## Architettura
|
|
|
|
### Livello Dati (MP.Data)
|
|
|
|
Il layer dati centralizzato in `MP.Data` fornisce:
|
|
|
|
- **8 Repository**: Anag, Production, Dossier, FluxLog, System, MpVoc, MpMon, MpLand
|
|
- **Cache FusionCache** (Memory + Redis + DB) con invalidazione per tag
|
|
- **DI Registrations** attraverso `DataServiceCollectionExtensions` (`AddSpecDataLayer`, `AddLandDataLayer`, etc.)
|
|
- **MpDataService** come servizio singleton centrale per accesso a DB, Redis, MongoDB
|
|
|
|
### Livello Applicazione (MP.SPEC)
|
|
|
|
- **MpDataService** (Scoped, singleton in Program.cs): service wrapper sul DAL con caching FusionCache
|
|
- **Componenti Blazor Server**: layout interattivo server-side con `AddInteractiveServerComponents()`
|
|
- **API Controllers**: RecipeController, RecipeArchiveController per operazioni ricette
|
|
- **Autenticazione**: Windows Authentication (Negotiate) con Autorizzazione Blazor Server
|
|
|
|
### Livello Infrastruttura
|
|
|
|
- **SQL Server**: 4 DbContext (MoonProContext, MoonPro_VocContext, MoonPro_FluxContext, MoonPro_STATSContext)
|
|
- **MongoDB**: storage ricette
|
|
- **Redis**: caching distribuito (FusionCache) + backplane
|
|
- **OpenTelemetry**: tracing su Uptrace (abilitabile via conf)
|
|
- **MessagePipe**: broadcasting messaggi real-time
|
|
|
|
## Refactoring Completati (Giugno 2026)
|
|
|
|
### Repository Pattern - Decomposizione MpSpecController
|
|
|
|
Il grande `MpSpecController/MpSpecRepository.cs` è stato scomposto in 8 repository specialistici:
|
|
|
|
| # | Repository | Interfaccia | Metodi | DbContext |
|
|
|---|---|---|---|---|
|
|
| 1 | **Anag** | `IAnagRepository` | 26 | `MoonProContext` |
|
|
| 2 | **Production** | `IProductionRepository` | 32 | `MoonProContext` |
|
|
| 3 | **Dossier** | `IDossierRepository` | 6 | `MoonPro_FluxContext` |
|
|
| 4 | **FluxLog** | `IFluxLogRepository` | 3 | `MoonPro_FluxContext` |
|
|
| 5 | **System** | `ISystemRepository` | 7 | `MoonProContext` + `MoonProAdminContext` |
|
|
| 6 | **MpVoc** | `IMpVocRepository` | 3 | `MoonPro_VocContext` |
|
|
| 7 | **MpMon** | `IMpMonRepository` | 4 | `MoonProContext` |
|
|
| 8 | **MpLand** | `IMpLandRepository` | 6 | `MoonProContext` |
|
|
|
|
Tutti i reference a `dbController.XXX()` nei servizi sono stati rimossi. I metodi originali rimangono nel file di repository come fallback documentato.
|
|
|
|
### Migrazione FusionCache
|
|
|
|
Tutti i metodi di lettura in `MpDataService.cs` sono stati migrati al pattern `GetOrFetchAsync<T>()`:
|
|
- **L1 MemoryCache**: 1/3 della scadenza totale
|
|
- **L2 Redis (Distributed)**: TTL configurabile
|
|
- **L3 Database**: fetch diretto dal DbContext
|
|
- **Invalidazione**: per tag (es. `Utils.redisArtList`, `Utils.redisOdlByKey`)
|
|
- **48+ metodi** migrati o confermati corretti
|
|
|
|
### Fix DI e Static State (MP.AppAuth)
|
|
|
|
Risolto il null reference error originario (`Cannot provide a value for property 'AAService' on type 'CmpTop'`):
|
|
|
|
- Rimpiazzati tutti i `static IConfiguration _configuration` con `readonly` istanza nei controllers
|
|
- `AppAuthService` ora riceve i controllers via constructor DI invece di crearli con `new()`
|
|
- Registrazioni DI centralizzate in `DataServiceCollectionExtensions.cs`
|
|
- Tutti i controllers e services mp.appauth registrati come Scoped
|
|
|
|
### Build
|
|
|
|
Tutte le 10 soluzioni compilano con successo (0 errori):
|
|
MP.SPEC, MP.Data, MP.Land, MP.MON, MP.TAB3, MP.Stats, MP.INVE, MP.IOC, MP.RIOC, MP.Prog, IobConf
|