2.0 KiB
2.0 KiB
dodo 数据模型
所有业务实体使用 UUIDv7 主键并按 user_id 隔离。生产使用 PostgreSQL,测试使用 SQLite;模型保持两者兼容。
app_state
key主键created_at
users
idusername唯一password_hashtimezonecreated_at
sessions
idtoken_hash唯一user_id→ users,级联删除expires_atcreated_at
folders
iduser_id→ usersnamepositioncreated_atdeleted_at,非空表示软删除
删除文件夹不会删除清单;清单的 folder_id 被置空。
task_lists
iduser_id→ usersfolder_id→ folders,可空nameis_inbox,每个用户初始化时创建一个受保护的系统收集箱positioncreated_atdeleted_at,非空表示软删除
删除普通清单时,其未删除任务原子移动到系统收集箱。系统收集箱不可重命名或删除。
tasks
iduser_id→ userslist_id→ task_listsparent_id→ tasks,可空;仅允许一层子任务且必须与父任务同清单titledescriptionpriority(0–3)completeddue_at,可空version,乐观锁版本;单任务更新用id + user_id + version原子比较更新positioncreated_atupdated_atdeleted_at,非空表示进入回收站
顶层任务软删除、恢复或永久删除时同步处理直接子任务。列表与回收站使用 (created_at, id) 作为稳定游标排序键。
迁移
0001_initial.py:已部署的初始模式,不修改0002_task_management.py:新增文件夹/清单软删除列、历史标签表及游标/回收站索引0008_remove_calendar_subscriptions.py:移除日历订阅表0009_remove_tags.py:移除历史标签表及任务标签关联表
后续阶段预留
- task_reminders
- task_recurrence_templates
- task_recurrence_exceptions
- habits / habit_logs / habit_reminders
- attachments
- audit_logs