diff --git a/src/routes/events.ts b/src/routes/events.ts index 7e09c1e..49db200 100644 --- a/src/routes/events.ts +++ b/src/routes/events.ts @@ -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);