Estoy construyendo un sistema de calendario desde cero (requisito, ya que estoy trabajando con un tipo especial de calendario junto a Gregorian), y necesito ayuda con la lógica . Estoy escribiendo la aplicación en Django y Python.Repetir "eventos" en un calendario: CPU vs Base de datos
Básicamente, los problemas lógicos con los que me estoy enfrentando es cómo persistir la menor cantidad de objetos posible de la manera más inteligente posible sin subir la pestaña en los ciclos de la CPU. Siento que el polimorfismo sería una solución para esto, pero no estoy exactamente seguro de cómo expresarlo aquí.
Tengo dos subconjuntos básicos de eventos, eventos repetidos y eventos one-shot.
Los eventos repetitivos tendrán suscriptores, personas a las que se les notificará sobre sus cambios. Si, por ejemplo, una clase se cancela o se mueve a una dirección o tiempo diferente, las personas que se han suscrito deben saberlo. Algunos eventos simplemente ocurren todos los días hasta el final de los tiempos, no se editarán y "simplemente sucederá". El problema es que si tengo un objeto que almacena la información del evento y su política de repetición, entonces cancelar o modificar un evento en la serie realmente arruina las cosas y tendré que dar cuenta de eso de alguna manera, manteniendo a los suscriptores al tanto cambiar y mantener las series juntas como un grupo lógico.
Paradoja: generar objetos de evento únicos para cada evento normal en una serie hasta el final de los tiempos (si se repite indefinidamente) no tiene sentido si todos van a almacenar la misma información; sin embargo, si ocurre un cambio en un solo evento de la serie, casi tendrá para crear un objeto diferente en la base de datos que represente una cancelación.
¿Alguien me puede ayudar con la lógica aquí? Realmente está retorciendo mi mente y realmente no puedo pensar con claridad. Realmente me gustaría obtener información sobre cómo resolver este problema, ya que repetir eventos no es exactamente lo más lógico (repetir cada dos días, o cada M/W/F, o el primer M de cada mes, o cada 3 meses, o una vez al año en esta fecha, o una vez a la semana en esta fecha, o una vez al mes en esta fecha, oa las 9:00 a. m. los martes y a las 11:00 a. m. los jueves, etc.) y yo como ayudar a entender la mejor ruta lógica para repetir eventos también.
Aquí es un pensamiento sobre cómo hacerlo:
class EventSeries(models.Model):
series_name = models.TextField()
series_description = models.TextField()
series_repeat_policy = models.IHaveNoIdeaInTheWorldOnHowToRepresentThisField()
series_default_time = models.TimeField()
series_start_date = models.DateField()
series_end_date = models.DateField()
location = models.ForeignKey('Location')
class EventSeriesAnomaly(models.Model):
event_series = models.ForeignKey('EventSeries', related_name="exceptions")
override_name = models.TextField()
override_description = models.TextField()
override_time = models.TimeField()
override_location = models.ForeignKey('Location')
event_date = models.DateField()
class EventSeriesCancellation(models.Model):
event_series = models.ForeignKey('EventSeries', related_name="cancellations")
event_date = models.TimeField()
cancellation_explanation = models.TextField()
Esto parece tener un poco de sentido, pero como se ha dicho anteriormente, esto está arruinando mi cerebro en este momento así que cualquier cosa parece que sería trabajar. (Otro problema y pregunta, si alguien quiere modificar todos los eventos restantes de la serie, ¿qué diablos hago?!!? Supongo que podría cambiar 'series_default_time' y luego generar instancias de anomalías para todas las instancias pasadas para configurarlos a la hora original, pero AHHHHHH !!!)
de ebullición se reduce a tres preguntas sencillas y concretas, tenemos:
- ¿Cómo puedo tener una serie de eventos que se repiten, sin embargo, permitir cancelaciones y modificaciones en eventos individuales y modificaciones en el resto de la serie como un todo, mientras se almacenan tan pocos objetos en la base de datos como sea absolutamente necesario, nunca se generan objetos para eventos individuales en ¿avanzar?
- ¿Cómo puedo repetir eventos de una manera altamente personalizable, sin perder la razón, ya que puedo permitir que los eventos se repitan en un number of ways, pero de nuevo facilitando las cosas y almacenando la menor cantidad de objetos posible?
- ¿Cómo puedo hacer todo lo anterior, permitiendo un cambio en cada serie de eventos para que no ocurra si se cae en un holiday?
+1 para la clase raramente vista, pero siempre tan útil: models.IHaveNoIdeaInTheWorldOnHowToRepresentThisField – mjhm
Utilizo ese campo con demasiada frecuencia. –