Files
dodo/docs/data-model.md
T
bboysoul 6c234d7d82
ci / gitleaks (push) Successful in 1m19s
ci / docker (push) Successful in 5m48s
feat: strengthen backup and mobile workflows
2026-09-16 21:12:52 +08:00

3.1 KiB

dodo 数据模型

业务主键使用 UUIDv7;带 user_id 的实体按用户隔离。时间点按 UTC 保存,用户时区用于日期语义与展示。生产使用 PostgreSQL,测试使用 SQLite。

账户

  • app_state:初始化状态
  • users:用户名、密码散列、时区
  • sessions:会话令牌散列、过期/最近访问时间、IP 与 User-Agent
  • audit_logs:用户、动作、实体、非敏感摘要和时间

任务域

  • folders:名称、位置、软删除时间;删除文件夹只解除清单分组
  • task_lists:文件夹、名称、收集箱标记、位置、软删除时间
  • tasks:清单、可空父任务、标题、Markdown 描述、优先级、完成/完成时间、截止时间、due_has_time、位置、版本、软删除与外部 ID
  • recurrence_templates:任务的一对一重复规则、开始/结束、计划或完成后触发模式、完成后间隔与最近完成时间
  • recurrence_exceptions:模板发生时间及标题/截止/完成/删除覆盖
  • attachments:任务、原始文件名、服务端存储名、MIME、大小和创建时间
  • purge_operations:清单永久删除时附件隔离区清理的补偿状态

任务树只允许一层,父子任务属于同一清单。清单归档仅设置清单 deleted_at,保留所有任务的 list_id;查询隐藏归档清单内任务,恢复清单后原任务和完成状态重新可见。任务与子任务软删除/恢复按生命周期规则处理,永久删除会清理关联重复数据和附件。

习惯、倒数日与备忘录

  • habits:完成型/数值型、目标/上限、日/周/月/间隔计划、开始日、排序和归档
  • habit_logs:习惯与日期唯一的数值记录
  • habit_pauses:习惯暂停区间
  • countdowns:标题、日期、公历/农历字段、类型、重复、兼容保留的图标字段、置顶与归档
  • memos:标题、Markdown 内容、乐观锁版本、创建/更新时间和软删除时间

完整备份 v2 内部状态

  • backup_preflights:令牌散列、用户、备份 ID/摘要/大小、暂存路径、模式、状态、过期/消费时间和待清理路径
  • backup_imports:每用户已导入备份 ID、归档摘要、模式和时间;用于幂等判断
  • backup_import_entities:源实体 ID 到目标 ID 的映射及内容摘要;用于 merge 冲突检测与可重试导入

这些表和账户/会话/审计信息不属于用户可迁移业务实体。ZIP v2 只导出:

foldersliststasksrecurrencesrecurrence_exceptionshabitshabit_logshabit_pausescountdownsmemosattachments

附件导出时去掉内部 storage_name,改用归档内安全路径并携带真实字节;恢复时生成目标存储名。每个实体文件和附件字节均由 manifest SHA-256 覆盖。

迁移

迁移按 00010019 顺序应用;当前最新 0019_backup_imports.py 增加完整备份预检、导入及实体映射账本。历史迁移还覆盖任务管理、会话元数据、查询索引、习惯排序、倒数日/农历、日期型截止语义、重复触发模式、备忘录与 completed_at 等演进。