Funzionalità Storico Ricette - Time Machine
Descrizione
È stata implementata una funzionalità di “Time Machine” per le ricette dei prodotti finiti. Questa funzione permette di:
- Salvare automaticamente ogni versione della ricetta quando viene modificata
- Visualizzare lo storico di tutte le modifiche
- Ripristinare una versione precedente della ricetta
Componenti Implementati
1. Modello Database
File: /backend/models/RecipeHistory.ts
- Salva snapshot completi della ricetta e del prezzo
- Include metadati come data di creazione e descrizione del cambiamento
- Multi-tenant con indice su
tenant_ideproduct_id
2. API Endpoints
GET /api/selling-products/recipe-history
File: /src/app/api/selling-products/recipe-history/route.ts
- Recupera lo storico delle versioni per un prodotto
- Query parameter:
productId - Restituisce le ultime 50 versioni ordinate per data
POST /api/selling-products/restore-recipe
File: /src/app/api/selling-products/restore-recipe/route.ts
- Ripristina una versione precedente della ricetta
- Salva automaticamente la versione corrente prima del ripristino
- Body:
{ productId, historyId }
3. Frontend
Pulsante Storico
File: /src/app/(dashboard)/prodotti-finiti/[product]/page.tsx
- Aggiunto pulsante “Storico” con icona Clock
- Posizionato a sinistra del pulsante “Modifica”
- Apre il dialog dello storico
Dialog Storico Ricetta
File: /src/components/(prodotti-finiti)/RecipeHistoryDialog/RecipeHistoryDialog.tsx
- Visualizza tutte le versioni storiche in ordine cronologico
- Mostra dettagli: data, prezzo, food cost, ingredienti
- Pulsante “Ripristina” per ogni versione (tranne quella corrente)
- Utilizza
date-fnsper formattare le date in italiano
4. Redux API Slice
File: /src/store/api/sellingProductsApi.ts
useGetRecipeHistoryQuery: hook per caricare lo storicouseRestoreRecipeVersionMutation: hook per ripristinare versioni
5. Auto-save Storico
File: /src/app/api/selling-products/update/route.ts
- Modificato per salvare automaticamente lo storico ad ogni update
- Controlla se la ricetta è effettivamente cambiata prima di salvare
- Evita duplicati confrontando JSON della ricetta e prezzo
Funzionamento
Salvataggio Automatico
Ogni volta che viene modificata una ricetta tramite l’API /api/selling-products/update:
- Viene confrontata la nuova ricetta con l’ultima versione salvata
- Se ci sono differenze, viene salvato uno snapshot nello storico
- Lo snapshot include: ricetta completa, prezzo, nome prodotto, data
Visualizzazione Storico
- L’utente clicca sul pulsante “Storico”
- Si apre un dialog con tutte le versioni precedenti
- Per ogni versione mostra:
- Data e ora della modifica
- Tempo relativo (es. “2 giorni fa”)
- Prezzo di vendita
- Food cost totale e percentuale
- Numero di ingredienti
- Lista dettagliata ingredienti
Ripristino Versione
- L’utente clicca “Ripristina” su una versione precedente
- Conferma l’operazione tramite dialog
- Il sistema:
- Salva la versione corrente nello storico
- Ripristina ricetta e prezzo dalla versione selezionata
- Ricarica automaticamente i dati del prodotto
Note Tecniche
Ottimizzazioni
- Lo storico è limitato alle ultime 50 versioni per evitare sovraccarico
- Le query utilizzano indici MongoDB per performance ottimali
- Lo snapshot viene salvato solo se ci sono effettive modifiche
Sicurezza
- Tutte le API sono protette con autenticazione
- I dati sono isolati per tenant (multi-tenancy)
- Solo il proprietario del prodotto può vedere e ripristinare lo storico
UI/UX
- La versione corrente è evidenziata con un badge
- Le date sono formattate in italiano
- Conferma richiesta prima del ripristino
- Feedback visivo per operazioni in corso
Dipendenze
date-fns: Per formattazione date@radix-ui/react-scroll-area: Per scroll area nel dialoglucide-react: Per le icone (Clock, RotateCcw, Calendar, DollarSign)
Estensioni Future Possibili
- Diff visivo tra versioni
- Export storico in formato CSV/PDF
- Filtri per data o tipo di modifica
- Note/commenti personalizzati per ogni versione
- Ripristino parziale (solo alcuni ingredienti)
Last updated on