Ho un'entità (modello) chiamata Notifica, mostrata agli Utenti del sistema. Finora, le notifiche sono state create e mostrate istantaneamente agli utenti quando erano abilitate e nascoste quando disabilitate o cancellate. Inoltre, gli utenti possono chiudere / annullare la notifica in modo che non la vedano più e tale azione viene mantenuta in una raccolta (tabella del database) di Notifiche visualizzate dagli utenti. Il sistema deve ora implementare ripetizioni di tali Notifiche, come ordini del giorno o calendari in cui le voci possono essere ripetute giornalmente, settimanalmente, mensilmente, ecc. E anche inviare una e-mail all'Utente il giorno prima della data dell'istanza di Notifica. Concettualmente come viene implementato? Che ne dici del calcolo della ripetizione?
Finora, ho pensato di mantenere tre nuove proprietà sull'entità di notifica, una per il tipo di ripetizione (giornaliera, settimanale, ecc.), una per la data di inizio (ora) e un'altra per la data di fine (ora) e una nuova raccolta (tabella del database) in cui salvo "istanze" di tali notifiche (non istanze come istanza di classe, ma un concetto più generico di una singola occorrenza di qualcosa), con proprietà come id di notifica e data di inizio e fine (tempo) di quell'istanza. In questo modo le notifiche stesse non verrebbero presentate agli utenti, ma le istanze di tali notifiche. Quindi, ho pensato a un'attività pianificata (cronjob) che viene eseguita un paio di volte al giorno, generando istanze dalla raccolta di notifiche che calcolano quando tali ripetizioni dovrebbero verificarsi e anche l'invio di e-mail quando la data dell'istanza calcolata è domani.
Non sono sicuro se questo è il modo migliore e mi piacerebbe sentire consigli. Ho iniziato a implementarlo in quel modo e finora sembra facile, ma sto per iniziare con la logica del compito programmato (la parte più difficile) e mi chiedo se sarà molto complesso calcolare la data delle istanze basate sulle specifiche di ripetizione (ogni giorno sembra facile, aggiungi un giorno al valore della data, ma che ne dici di ogni terzo venerdì del mese?).