feat: countdown anniversaries and birthdays like ticktick
ci / docker (push) Successful in 6m18s

This commit is contained in:
2026-09-06 15:36:42 +08:00
parent 3e20943d1e
commit afc78dba6c
17 changed files with 561 additions and 13 deletions
+10
View File
@@ -36,6 +36,16 @@ Base path: `/api/v1`. 除初始化、登录和健康检查外均需 `dodo_sessio
批量请求字段:`task_ids``completed``list_id``due_at``soft_delete`。所有任务和目标清单在写入前完成归属校验;任一不存在则整批不修改。
## Countdowns
- `GET /countdowns?archived=false` — 查询倒数日;置顶项优先,其余按下一次发生日期排序
- `POST /countdowns` — 创建倒数日、纪念日或生日;支持 `none/weekly/monthly/yearly` 重复
- `PATCH /countdowns/{countdown_id}` — 编辑名称、日期、类型、重复与图标
- `POST /countdowns/{countdown_id}/pin` — 单一置顶,自动取消其他置顶项
- `DELETE /countdowns/{countdown_id}` — 归档
- `POST /countdowns/{countdown_id}/restore` — 恢复归档项
- `DELETE /countdowns/{countdown_id}/purge` — 永久删除已归档项
## Recycle bin
- `GET /trash?limit=&cursor=` — 已删除顶层任务的游标分页
+14
View File
@@ -66,12 +66,26 @@
顶层任务软删除、恢复或永久删除时同步处理直接子任务。列表与回收站使用 `(created_at, id)` 作为稳定游标排序键。
## countdowns
- `id`
- `user_id` → users,级联删除
- `title`
- `event_date`,仅日期
- `kind``countdown` / `anniversary` / `birthday`
- `repeat_rule``none` / `weekly` / `monthly` / `yearly`
- `icon`
- `pinned`,每个用户仅保留一个置顶项
- `archived_at`,非空表示归档
- `created_at` / `updated_at`
## 迁移
- `0001_initial.py`:已部署的初始模式,不修改
- `0002_task_management.py`:新增文件夹/清单软删除列、历史标签表及游标/回收站索引
- `0008_remove_calendar_subscriptions.py`:移除日历订阅表
- `0009_remove_tags.py`:移除历史标签表及任务标签关联表
- `0010_countdowns.py`:新增倒数日、纪念日与生日表
## 后续阶段预留
+7
View File
@@ -66,6 +66,13 @@ postgresql+asyncpg://postgres:***@10.10.100.99:5433/dodo
- 支持暂停区间,暂停期不破坏连续记录
- 归档后保留历史统计
### 倒数纪念日
- 支持倒数日、纪念日、生日
- 支持不重复、每周、每月、每年重复
- 未来显示“还有 N 天”,当天显示“就是今天”,过去显示“已经 N 天”
- 支持单一置顶、归档恢复、编辑和删除
## UI 方向
- 手账生活感