Dominio: Habit

Un'Abitudine rappresenta un'azione che un utente si impegna a compiere con una certa regolarità. Ogni abitudine appartiene a un Avatar e ha le seguenti caratteristiche:

  • Titolo e Descrizione
  • Ricorrenza: cadenza con cui l'abitudine deve essere eseguita.
  • Tag: etichette opzionali per categorizzare l'abitudine.
  • Data dell'ultima esecuzione: tiene traccia di quando l'abitudine è stata rispettata per l'ultima volta.
  • Quest associata (opzionale): un collegamento a una quest specifica del sistema Quest.

Titolo, descrizione, tag e ricorrenza possono essere aggiornati in qualsiasi momento.

Ricorrenza

Ogni abitudine ha una ricorrenza che definisce ogni quanto deve essere completata. Esistono tre tipi:

  • Giornaliera: l'abitudine deve essere completata ogni giorno.
  • Settimanale: l'abitudine deve essere completata una volta alla settimana, in un giorno specifico.
  • Mensile: l'abitudine deve essere completata una volta al mese, in un giorno specifico del mese.

La ricorrenza serve al sistema per calcolare automaticamente quando un'abitudine avrebbe dovuto essere eseguita e rilevare eventuali abitudini mancate.

Completamento

Quando un utente rispetta la propria abitudine, il sistema registra la data di completamento. Questo innesca due effetti collaterali verso gli altri servizi: 1. L'Avatar guadagna punti esperienza. 2. Se c'è una Quest associata, il sistema notifica il Quest Service registrando la partecipazione dell'Avatar all'abitudine in quella data. Il Quest Service potrà così aggiornare il progresso della missione.

Un'abitudine può essere eliminata. L'evento di eliminazione viene registrato nello .


Il rilevamento delle abitudini scadute

Un componente automatico controlla ogni minuto tutte le abitudini attive e verifica se ce ne sono di scadute, ovvero abitudini la cui scadenza attesa è già passata ma che non sono ancora state completate.

Le condizioni che rendono un'abitudine "scaduta" sono: - Non è mai stata completata (l'utente non l'ha mai rispettata da quando l'ha creata). - La prossima scadenza attesa, calcolata in base all'ultima esecuzione e alla ricorrenza, è già passata.

Quando viene rilevata un'abitudine scaduta, il sistema genera un evento apposito. Tuttavia evita di duplicare la segnalazione: se l'abitudine è già stata marcata come scaduta con le stesse informazioni, non viene generato un nuovo evento.

Lo storico

Ogni abitudine mantiene un registro storico di tutti gli eventi che l'hanno riguardata, con il momento esatto e un dettaglio testuale (es. il valore aggiornato, il tipo di ricorrenza scelto, la data di completamento). Questo storico è consultabile sia per singola abitudine che aggregato per Avatar, in ordine cronologico inverso (dal più recente).

Al momento della creazione, l'evento viene registrato nello storico. Ogni modifica di titolo, descrizione o tag, o anche l'eliminazione dell'abitudine, genera un evento nello storico. Ogni completamento o mancato completamento genera un evento nello storico.

Gli eventi di dominio

Ogni evento significativo che accade a un'abitudine viene segnalato nel dominio. Gli eventi vengono sia registrati nello storico interno dell'abitudine, sia pubblicati su un canale di notifica.

Evento Quando si genera Viene pubblicato esternamente?
HabitCreated Alla creazione dell'abitudine No (solo storico)
HabitUpdated A ogni modifica di titolo, descrizione, tag o ricorrenza No (solo storico)
HabitAttended Quando l'utente completa l'abitudine ✅ Sì
HabitNotAttended Quando il sistema rileva l'abitudine scaduta ✅ Sì
HabitDeleted Quando l'abitudine viene eliminata ✅ Sì