--- trigger: model_decision description: Quando è richiesta una feature specifica per un cliente, non inerente allo standard --- usa ./docs/development/devlog/customizations per tenere traccia di tutti i piani di lavoro custom e il loro attuale stato singolarmente, crea qui dentro i log delle lavorazioni ed il lavoro fatto, da fare e suggerito per ogni piano di sviluppo, usa il formato "yyyy-mm-dd-hh24miss_descrizione_brevissima". usa ./docs/development per tenere un file ZENTRAL_CUSTOM.md riassuntivo con link ai file specifici dentro ./docs/development/devlog/customizations e una breve sintesi specificando che tipo di sviluppo si è concluso o si sta lavorando. ## Struttura Modulare del Progetto Custom Per ogni modulo custom specificatamente sviluppato per una richiesta cliente è necessario prima trovare il miglior modo per integrare questo modulo custom il più possibile con i moduli esistenti, evitando di duplicare il codice e permettendo di scrivere meno codice possibile. ### Backend (.NET) - **API Controllers**: `src/backend/Zentral.API/Modules/Custom/[NomeModulo]/Controllers/` - I controller devono avere il namespace `Zentral.API.Modules.[NomeModulo].Controllers`. - Le rotte devono seguire il pattern `api/custom/[nome-modulo]/[controller]`. - **Entities**: `src/backend/Zentral.Domain/Entities/Custom/[NomeModulo]/` - Le entità devono avere il namespace `Zentral.Domain.Entities.Custom.[NomeModulo]`. ### Frontend (React) - **Moduli**: `src/frontend/src/modules/custom/[nome-modulo]/` - **Pagine**: `src/frontend/src/modules/custom/[nome-modulo]/pages/` - **Componenti**: `src/frontend/src/modules/custom/[nome-modulo]/components/` - **Rotte**: `src/frontend/src/modules/custom/[nome-modulo]/routes.tsx` - Il file `routes.tsx` deve esportare un componente che definisce le rotte figlie del modulo. - Le rotte devono essere importate e registrate nel router principale (es. `App.tsx`).