Skip to Content
TecnicaFunzionalitaFunzionalità Storico Ricette - Time Machine

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_id e product_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-fns per formattare le date in italiano

4. Redux API Slice

File: /src/store/api/sellingProductsApi.ts

  • useGetRecipeHistoryQuery: hook per caricare lo storico
  • useRestoreRecipeVersionMutation: 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:

  1. Viene confrontata la nuova ricetta con l’ultima versione salvata
  2. Se ci sono differenze, viene salvato uno snapshot nello storico
  3. Lo snapshot include: ricetta completa, prezzo, nome prodotto, data

Visualizzazione Storico

  1. L’utente clicca sul pulsante “Storico”
  2. Si apre un dialog con tutte le versioni precedenti
  3. 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

  1. L’utente clicca “Ripristina” su una versione precedente
  2. Conferma l’operazione tramite dialog
  3. 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 dialog
  • lucide-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