Files
disknext/PLAN.md

3.4 KiB
Raw Blame History

  • 数据模型初步规划

    • 基类
      • IDUUIDv7
      • 创建时间
      • 更新时间
    • User
      • 用户名 唯一
      • 昵称
      • Argon2化的密码
      • 用户当前的状态 正常/手动封禁/系统封禁 用 StrEnum 存储
      • 已用存储空间
      • 用户积分
      • 默认用户组
      • Optional[两步验证密钥]
      • Optional[WebAuthn 凭证]
      • Optional[头像地址] -> None为昵称首字/图片/Gavatar头像
      • Optional[当前用户组过期时间] -> 用户组过期后回退默认用户组
      • 用户的个人设置 计划中 考虑 BaseModel 进行嵌套
    • Group 与 User 的关系:一个用户组可以有多个用户,但一个用户只能在一个用户组中
    • Object
      • 对象名
        • 区分大小写
        • 禁止名称为特殊字段 (如 /, \, :, *, ?, <, >, :, ")
      • 对象类型[file, folder, link]
      • 当对象类型为file时
        • 源文件名
        • 文件大小
        • 分块上传会话ID
        • 文件MD5, SHA1, SHA256
        • 文件元数据
          • 音频:歌名、歌手名、专辑、流派...
          • 图片: 尺寸、ISO、曝光、拍摄设备、地理位置...
          • 其他需要记录的元数据
      • 当对象类型为 link 时
        • 目标对象ID
      • 外键
        • 用户ID 用于确保该对象的归属
        • 目录ID 用于定位该对象存在哪个目录
        • 策略ID 用于定位该对象存储于哪个存储策略
    • Policy
      • 存储策略名
      • 策略类型(如 本机, 从机, s3, OSS, COS 等)
      • 服务器地址(本机则为路径)
      • 存储桶名称
      • 允许上传文件的最大字节数
      • 目录命名规则
      • 文件命名规则
      • 文件后缀白名单/黑名单
      • 分片上传大小
      • 待研究
    • Tag
      • 标签名称
      • 标签图标
      • 标签颜色
      • 外键
        • 用户ID 用于确保该标签的归属
  • 运行环境与目标

    • 数据库类型:主要支持 PostgreSQL 18考虑兼容 SQLite/MySQL/早期版本PostgreSQL
    • 驱动版本:做一定的向下兼容,主要支持 Python 3.14
    • 异步栈:全量异步 AsyncSession不接受兼容同步
  • 业务语义与数据模型

    • 时间与时区:统一存储 UTC再根据用户选择的时区计算本地化时间
    • 文件/目录命名规则
      • 文件名在同一目录下唯一
      • 目录名在同一账户下的同一父目录下唯一
    • 资源分享
      • 用户可以分享单个文件,也可以分享整个目录
  • 关系与级联

    • 删除文件夹时,同时删除该文件夹内的所有子文件夹及其所有文件
    • 删除用户时同时删除该用户的所有文件文件夹分享Tag