Files
social-app/docs/plans/2026-03-11-calendar-reminder-metadata-design.md
T

64 lines
1.8 KiB
Markdown
Raw Normal View History

# 日历提醒字段与详情页对齐设计
**Date:** 2026-03-11
**Status:** 已确认
## 目标
- 修复日历事件详情页字段映射错误,去掉 raw metadata 直出
- 新增可持久化的提醒字段(方案1):`metadata.reminder_minutes`
- 打通前后端和 AgentScope 工具调用链
- 用前端本地通知实现系统提醒与震动
## 数据契约
### metadata 结构
```json
{
"color": "#4F46E5",
"location": "会议室A",
"notes": "带电脑",
"attachments": [],
"reminder_minutes": 15,
"version": 1
}
```
### 字段规则
- `reminder_minutes`: `int | null`
- 取值范围:`0..10080`(0 表示准时提醒,10080 表示最多提前 7 天)
- 兼容历史数据:缺失或 null 视为无提醒
## 前端设计
1. 模型层(`ScheduleMetadata`)新增 `reminderMinutes`
2. 详情页:提醒时间改为结构化渲染
- null: `无`
- 0: `准时提醒`
- n: `开始前 n 分钟`
3. 创建/编辑弹层新增提醒选项,默认值为 `15`
4. 删除 metadata raw 原样渲染区块
## 本地通知设计
- 采用 Flutter 本地通知,调度时间:`startAt - reminderMinutes`
- 创建/编辑成功:重建该事件通知
- 删除成功:取消该事件通知
- App 启动后:扫描未来事件并重建通知(补偿机制)
## 后端与 AgentScope 设计
1. `ScheduleItemMetadata` 增加 `reminder_minutes`
2. service 继续走 `metadata -> extra_metadata`,不加新 DB 列
3. AgentScope `calendar.write` 增加 `reminder_minutes` 参数
4. CrewAI calendar tool 将 `reminderMinutes` 映射为 `metadata.reminder_minutes`
5. calendar tool 回包增加 `reminderMinutes` 字段
## 验证策略
- 后端:schemas/service/agentscope 单元测试
- 前端:calendar_api 与详情页渲染测试
- 手动:创建提醒 -> 等待系统通知与震动 -> 更新/删除后确认调度变更