fix: 完成循环提醒时自动创建下一个提醒
当用户勾选完成循环提醒时,自动根据循环类型计算下一个日期, 并创建新的提醒事件 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
16a2c7a043
commit
8fad17ee08
@ -244,6 +244,57 @@ router.put(
|
||||
args.push(data.is_holiday ? 1 : 0);
|
||||
}
|
||||
|
||||
// 检查是否是完成循环提醒
|
||||
let newEventCreated = false;
|
||||
if (data.is_completed === true && data.repeat_type !== 'none') {
|
||||
// 获取当前事件的详细信息用于创建新提醒
|
||||
const currentEvent = existing.rows[0] as EventRow;
|
||||
if (currentEvent) {
|
||||
// 计算下一个提醒日期
|
||||
const currentDate = new Date(currentEvent.date);
|
||||
let nextDate: Date;
|
||||
|
||||
switch (currentEvent.repeat_type) {
|
||||
case 'daily':
|
||||
nextDate = new Date(currentDate);
|
||||
nextDate.setDate(nextDate.getDate() + 1);
|
||||
break;
|
||||
case 'weekly':
|
||||
nextDate = new Date(currentDate);
|
||||
nextDate.setDate(nextDate.getDate() + 7 * (currentEvent.repeat_interval || 1));
|
||||
break;
|
||||
case 'monthly':
|
||||
nextDate = new Date(currentDate);
|
||||
nextDate.setMonth(nextDate.getMonth() + 1);
|
||||
break;
|
||||
case 'yearly':
|
||||
nextDate = new Date(currentDate);
|
||||
nextDate.setFullYear(nextDate.getFullYear() + 1);
|
||||
break;
|
||||
default:
|
||||
nextDate = currentDate;
|
||||
}
|
||||
|
||||
// 创建新的提醒事件
|
||||
const newEventId = crypto.randomUUID();
|
||||
const newDateValue = nextDate.toISOString();
|
||||
// 新的 reminder_times 应该是原日期,用于下一次完成时再次创建
|
||||
// reminder_times 在数据库中是 JSON 字符串
|
||||
let reminderTimesValue = currentEvent.reminder_times;
|
||||
if (!reminderTimesValue) {
|
||||
reminderTimesValue = JSON.stringify([currentEvent.date]);
|
||||
}
|
||||
|
||||
await db.execute({
|
||||
sql: `INSERT INTO events (id, user_id, type, title, content, date, is_lunar, repeat_type, repeat_interval, next_reminder_date, is_holiday, is_completed, priority, reminder_times, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?, datetime('now'), datetime('now'))`,
|
||||
args: [newEventId, req.user!.userId, currentEvent.type, currentEvent.title, currentEvent.content, newDateValue, currentEvent.is_lunar, currentEvent.repeat_type, currentEvent.repeat_interval, currentEvent.next_reminder_date, currentEvent.is_holiday, currentEvent.priority, reminderTimesValue],
|
||||
});
|
||||
newEventCreated = true;
|
||||
console.log('[Complete Repeat] Created new reminder:', newEventId, 'date:', newDateValue);
|
||||
}
|
||||
}
|
||||
|
||||
if (data.is_completed !== undefined) {
|
||||
updates.push('is_completed = ?');
|
||||
args.push(data.is_completed ? 1 : 0);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user