如何将数据(注释,受理人)存储到使用RRULE

时间:2017-03-29 14:36:13

标签: database-design calendar icalendar rrule

我正在构建一个允许用户创建重复活动的日历应用程序。

我没有为MongoDB中的每个重复事件创建一个新对象,而是创建了一个附加了重复规则的单个事件对象。

然后在客户端上,我“扩展”重复规则,为事件的每次重复创建临时对象,以便它们全部显示在日历中。

这一切都运行得很好,并且在事件频繁出现的任何时候都会阻止我的数据库填充数百个对象。我的问题是:如何针对每个重复发生的事件存储数据?例如,玩Google日历我可以创建一个定期事件,然后为每个重复添加“注释”。可以将注释添加到单个事件或所有事件中。

到目前为止,我的想法是当用户想要添加“注释”时,为用户正在编辑的重复添加EXDATE,然后为其创建一个新的独立事件对象。

我不确定这是否是解决此问题的最佳方法。建议非常赞赏。

1 个答案:

答案 0 :(得分:1)

就iCalendar表示而言,模拟此类异常的正确方法是将其作为同一事件(相同UID)的一部分,并使用额外的RECURRENCE-ID参数。你不应该添加一个EXDATE:

BEGIN:VEVENT
UID:XXX
DTSTART;TZID=zzz:20170401T090000
RRULE:FREQ=DAILY
...
END:VEVENT
BEGIN:VEVENT
UID:XXX
RECURRENCE-ID;TZID=zzz:20170405T090000
DTSTART;TZID=zzz:20170405T090000
... 
END:VEVENT

请注意,异常的RECURRENCE-ID应始终对应于从RRULE计算的日期时间,而异常的DTSTART可能不同(例如,如果在一个实例上,您将事件的时间从9移动到10 ,RECURRENCE-ID为T090000,而DTSTART为T100000。

另见https://tools.ietf.org/html/rfc5546#section-4.4.2