37 lines
2.4 KiB
Markdown
37 lines
2.4 KiB
Markdown
# Refinement Gestione Moduli
|
|
|
|
**Data:** 2025-12-03
|
|
**Stato:** Completato
|
|
|
|
## Obiettivo
|
|
Raffinare il flusso di attivazione e acquisto dei moduli, separando chiaramente lo stato di "acquisto" (subscription valida) dallo stato di "attivazione" (abilitazione utente). Implementare la gestione delle dipendenze sia in fase di acquisto (bulk purchase) che di disattivazione.
|
|
|
|
## Modifiche Apportate
|
|
|
|
### Backend (.NET)
|
|
- **Entità `ModuleSubscription`**: Modificato il metodo `IsValid()` per controllare *solo* la validità temporale della subscription (date), ignorando il flag `IsEnabled`.
|
|
- **Servizio `ModuleService`**:
|
|
- Aggiornato `IsModuleEnabledAsync` per verificare sia `IsEnabled` (utente) che `IsValid` (date).
|
|
- Aggiornato `DisableModuleAsync` per permettere la disattivazione di un modulo se i suoi dipendenti sono già stati disattivati dall'utente (anche se validi).
|
|
- Aggiornato `GetActiveModulesAsync` per filtrare i moduli visibili nel menu solo se sono sia validi che abilitati dall'utente.
|
|
- **Controller `ModulesController`**: Aggiornato il mapping DTO per riflettere correttamente lo stato `IsEnabled` verso il frontend.
|
|
|
|
### Frontend (React)
|
|
- **Nuovo Componente `ModulePurchaseDialog`**:
|
|
- Gestisce l'acquisto dei moduli.
|
|
- **Dependency Resolution**: Calcola ricorsivamente le dipendenze mancanti e le include nel totale dell'acquisto.
|
|
- Mostra un riepilogo chiaro con i costi aggiuntivi per le dipendenze.
|
|
- **Pagina `ModulesAdminPage`**:
|
|
- Aggiornata la UI delle card per mostrare il tasto "Acquista" solo se la subscription è scaduta/inesistente.
|
|
- Se il modulo è valido ma disattivato, mostra lo stato "Disattivato" e permette la riattivazione tramite toggle.
|
|
- Implementata gestione errori avanzata: mostra messaggi specifici dal backend (es. dipendenze attive che impediscono la disattivazione).
|
|
- **Sidebar**: Verifica che i moduli disattivati non compaiano nel menu laterale.
|
|
|
|
## Verifica
|
|
- [x] Il tasto "Acquista" appare solo per moduli non posseduti o scaduti.
|
|
- [x] Disattivare un modulo valido lo mantiene "Disattivato" ma non richiede nuovo acquisto.
|
|
- [x] Disattivare un modulo con dipendenze attive mostra un errore specifico.
|
|
- [x] Disattivare un modulo con dipendenze disattivate (ma valide) è permesso.
|
|
- [x] I moduli disattivati scompaiono dal menu laterale.
|
|
- [x] L'acquisto di un modulo include automaticamente le dipendenze mancanti nel prezzo e nell'attivazione.
|